我们说我有一个2D数组:
vector<vector<int8_t>> table =
{
{0, 1, 2, 3, 4, 5 },
{22, 46, 12, 2, 35, 4 },
{4, 5, 6, 22, 11, 8 },
};
如何只搜索特定元素的一行。我试图使用迭代器,但是如何告诉它们从一行的开头开始?
所以,我总是知道要搜索哪一行,所以不需要进入循环。
例如在第1行搜索第12行。
答案 0 :(得分:2)
auto it = std::search(table[row_index].begin(),table[row_index].end(),value);
答案 1 :(得分:2)
您可以编写一般功能。例如
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 );
}
或者您可以将其设为模板功能
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 );
}
而不是typename std::vector<std::vector<T>>::size_type n
,您可以使用size_t n
答案 2 :(得分:1)
像对待任何其他向量一样对待每一行。
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";