如何在std :: vector中查找项的位置

时间:2013-11-18 13:53:55

标签: c++ std stdvector

我的问题与How to find an item in a std::vector?非常相似但是,我想更进一步,假设我正在搜索的项目在向量中出现了几次,我也希望在向量中获得它的位置。例如,我的矢量是[ 1 3 4 3 7],我要搜索的项目是3。然后,该项目的位置为13。使用std::find函数,我只能获得向量中的第一个位置。有任何想法吗?

3 个答案:

答案 0 :(得分:7)

只需将其粘贴在while循环中,

    auto i = std::find(v.begin(), v.end(), n);
    std::vector<std::size_t> result;
    while(i != v.end())
    {
      result.push_back(std::distance(v.begin(), i));
      i = std::find(i + 1, v.end(), n);
    }

答案 1 :(得分:4)

连续使用std::find次,然后将所有结果放在一起。用作您找到的范围的first,前一个std::find返回给您的位置加上一个。

答案 2 :(得分:4)

您可以多次使用std::find

std::vector<int> vec;
// fill the vector with numbers
std::vector<int>::iterator it = vec.begin();
while (it != vec.end())
{
    it = std::find(it, vec.end(), 3);
    // do something with *it
    if (it != vec.end())
        it++;
}

或者您只需使用std::for_each

std::vector<int> vec;
// fill the vector with numbers
std::for_each(vec.begin(), vec.end(), [&](int i)
{
    if (i == 3)
    {
        // do something
    }
});

如果要查找项目的索引/迭代器,可以只使用自定义循环:

std::vector<int> vec;
// fill the vector with numbers
std::vector<int> results;
for (std::size_t i = 0; i < vec.size(); ++i)
{
    if (vec[i] == 3)
    {
        results.push_back(i);
    }
}
然后

results将保留符合条件的元素的所有索引(在本例中为==3)。