比方說,我有一個二維數組:迭代器只有一排的向量的向量的
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