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