Iterator只有一行向量的向量

时间:2014-09-29 07:15:37

标签: c++ vector iterator

我们说我有一个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行。

3 个答案:

答案 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";