Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 查找向量中元素的所有引用的索引_C++_Vector - Fatal编程技术网

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在寻找一组索引,而不是一组元素的副本。是的,你是对的,再次编辑