我是C ++的初学者,非常感谢任何帮助。 这是我可以成功运行的代码:
#include <Eigen/Dense>
#include <iostream>
using namespace Eigen;
main(){
bool findIn=false;
RowVectorXd A(10);
A<<false,true,false,true,true,false,false,false,true,true;
std::cout << A << std::endl;
for (int i=0;i<A.size();i++){
if(A(i)==findIn){
std::cout << i << std::endl;
}
}
system("pause");
}
结果是{0,2,5,6,7},我想设计一个函数,代码如下:
int seq(bool findIn, VectorXd &resdX){
VectorXd A;
for(int i=0;i<resdX.size();i++){
if(resdX(i)==findIn){
A =A+i;
}
}
return(A);
}
我希望这个函数返回像{0,2,5,6,7}那样的结果。但是我不知道如何设置一个数组来保存结果,或者是否有一个像'which'这样的函数在R软件中产生上面的序列。
答案 0 :(得分:1)
听起来你想要一个整数向量:
#include <vector>
std::vector<int> seq(bool findIn, VectorXd &resdX)
{
std::vector<int> v;
for(int i=0;i<resdX.size();i++) {
if (resdX(i) == findIn) {
v.push_back(i);
}
}
return v;
}
然后您可以通过迭代来打印其内容:
std::vector<int> result = seq(false, A);
for (int i : result) std::cout << i << '\n';
答案 1 :(得分:0)
我不明白你在找什么。
如果您只想打印一系列int
egers索引findIn
值,您可以编码:
void seq(bool findIn, VectorXd &resdX) { // not int
std::cout << "{ ";
for(int i=0;i<resdX.size();i++) // go inside the array
if(resdX(i)==findIn) // if you find that resdX(i) value equals findIn value
std::cout << i << " "; // print i index
std::cout << "}" << std::endl; // at the end prints a new line
}
<强> EDIT1:强>
尝试调整以下代码段:
#include <list>
...
std::list<int> seq(bool findIn, VectorXd& resdX) {
std::list<int> l;
for(int i=0; i<resdX.size(); i++) {
if (resdX(i) == findIn) {
l.push_back(i);
}
}
return l;
}
void print_seq(std::list<int> list_) {
std::cout << "{ ";
std::list<int>::iterator it = list_.begin();
for (; it != list_.end(); ++it) {
std::cout << i << " ";
}
std::cout << " }\n";
}