如何在数组中获取'false'序列

时间:2014-10-16 13:44:14

标签: c++ sequence eigen

我是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软件中产生上面的序列。

2 个答案:

答案 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";
}