比方说,我有一个二维数组:迭代器只有一排的向量的向量的
vector<vector<int8_t>> table =
{
{0, 1, 2, 3, 4, 5 },
{22, 46, 12, 2, 35, 4 },
{4, 5, 6, 22, 11, 8 },
};
如何搜索只有一排特定元素。我试图使用迭代器,但如何告诉他们在一行的开始处开始?
因此,我总是知道要搜索哪一行,以便不需要进入循环。
例如搜索元件12的第1行。
比方说,我有一个二维数组:迭代器只有一排的向量的向量的
vector<vector<int8_t>> table =
{
{0, 1, 2, 3, 4, 5 },
{22, 46, 12, 2, 35, 4 },
{4, 5, 6, 22, 11, 8 },
};
如何搜索只有一排特定元素。我试图使用迭代器,但如何告诉他们在一行的开始处开始?
因此,我总是知道要搜索哪一行,以便不需要进入循环。
例如搜索元件12的第1行。
您可以编写一个通用函数。例如
size_t find_element(const std::vector<std::vector<int>> &v,
std::vector<std::vector<int>>::size_type n,
int value)
{
if (v.size() <= n) return -1;
auto it = std::find(v[n].begin(), v[n].end(), value);
return it == v[n].end() ? -1 : std::distance(v[n].begin(), it);
}
或者你可以把一个模板函数,而不是typename std::vector<std::vector<T>>::size_type n
template <class T>
size_t find_element(const std::vector<std::vector<T>> &v,
typename std::vector<std::vector<T>>::size_type n,
const T &value)
{
if (v.size() <= n) return -1;
auto it = std::find(v[n].begin(), v[n].end(), value);
return it == v[n].end() ? -1 : std::distance(v[n].begin(), it);
}
你可以使用简单的size_t n
有无论如何得到一个更普遍的功能,所以对于int8_t,int16_t等..总之,这看起来像一个非常好的解决方案。谢谢。 – user1876942 2014-09-29 08:03:52
@ user1876942您可以简单地使我显示模板的功能。看到我更新的帖子。 – 2014-09-29 08:08:59
对待每一行像其他矢量一样。
auto row_beg = table[1].begin();
auto row_end = table[1].end();
auto find_it = std::find(row_beg, row_end, 12);
if (find_it != row_end)
std::cout << "Found.\n";
谢谢,有无论如何知道什么时候发现了物品,例子12在元素3找到然后中断? – user1876942 2014-09-29 07:34:10
@ user1876942你的意思是获得索引?你可以尝试'find_it - row_beg'或者'std :: distance(row_beg,find_it)'。 – 2014-09-29 07:39:15
auto it = std::search(table[row_index].begin(),table[row_index].end(),value);
'它 - >开始()'和'它 - >结束( )'也许? – 101010 2014-09-29 07:16:42
这将搜索整个数组。 – user1876942 2014-09-29 07:35:57
不,它不会。由于'it'指向外部向量的向量。 – 101010 2014-09-29 07:38:34