C++ 查找向量中元素的所有引用的索引
假设我有一个向量C++ 查找向量中元素的所有引用的索引,c++,vector,C++,Vector,假设我有一个向量a={1001010}。现在,我想获取作为另一个向量B返回的所有0的索引 template< class InputIt, class T> std::vector<int> IndicesOf(InputIt first, InputIt last, const T& value) { } 模板 std::向量指示符of(先输入、后输入、常数和值){ } 这是一个开始: std::vector<int>::iterator it
a={1001010}
。现在,我想获取作为另一个向量B
返回的所有0的索引
template< class InputIt, class T>
std::vector<int> IndicesOf(InputIt first, InputIt last, const T& value) {
}
模板
std::向量指示符of(先输入、后输入、常数和值){
}
这是一个开始:
std::vector<int>::iterator iter = std::find_if(A.begin(), A.end(), 0);
B = std::distance(A.begin(), iter);
std::vector::iterator iter=std::find_if(A.begin(),A.end(),0);
B=std::distance(A.begin(),iter);
只需再次调用std::find_if
,以先前返回的迭代器(加1)为开始。在循环中执行直到std::find_if
返回a.end()
示例代码
#include <algorithm> //find_if
bool isZero(int x){
return x == 0;
}
std::vector<int>::iterator iter = A.begin();
while ((iter = std::find_if(iter, A.end(), isZero)) != A.end())
{
// Do something with iter
iter++;
}
\include//find\u if
布尔值为零(整数x){
返回x==0;
}
std::vector::迭代器iter=A.begin();
while((iter=std::find_if(iter,A.end(),isZero))!=A.end())
{
//用iter做点什么
iter++;
}
试试这个:
char c:要获取其索引的元素。
我使用了一个字符串,但同样的代码可以很好地处理向量。
vecky存储找到的所有索引
std::vector<int> getIndex(string s, char c)
{
std::vector<int> vecky;
for (int i = 0; i != s.length(); i++)
{
if (s[i] == c)
{
vecky.push_back(i);
}
}
return vecky;
}
std::vector getIndex(字符串s,字符c)
{
向量向量向量机;
对于(int i=0;i!=s.length();i++)
{
如果(s[i]==c)
{
vecky.推回(i);
}
}
返回维基;
}
对于@some programmer dude with lamda的回答:
#include <algorithm> //find_if
std::vector<int> A{1, 0, 1, 1, 0, 0, 0, 1, 0};
std::vector<int> B;
std::vector<int>::iterator it = A.begin();
while ((it= std::find_if(it, A.end(), [](int x){return x == 0; })) != A.end())
{
B.push_back(std::distance(A.begin(), it);)
it++;
}
\include//find\u if
向量A{1,0,1,1,0,0,0,1,0};
std::载体B;
std::vector::iterator it=A.begin();
while((it=std::find_if(it,A.end(),[](int x){return x==0;}))!=A.end())
{
B.向后推(标准::距离(A.开始(),it);)
it++;
}
您能详细解释一下我没有得到的信息吗?谢谢,我制作了std::vector::iterator iter=data.begin();而((iter=std::find(iter,data.end(),0))!=data.end()){int idx=std::distance(data.begin(),iter);cout@stephanmg不,没有特定于C++11(或更高版本)的内容在我的回答中。@Someprogrammerdude:哦,是的,我浏览得太快了。@ScottmWorken不应该是template std::vector…
?OP在寻找一组索引,而不是一组元素的副本。是的,你是对的,再次编辑