如何将列表拆分为几个向量?

时间:2014-12-10 11:57:05

标签: c++ list vector insert

我有一个包含n个元素的列表。这些元素创建矩阵A: A(例子):

我想创建包含行外所有元素的向量。 所以第一个向量包含第一行的所有数字,第二行的第二个向量包含所有数字。 那是我的代码到目前为止:

void Insert(){
        ifstream OpenFile("A.txt");
        if(OpenFile.good()){
            istream_iterator <double> start(OpenFile), end;
            list <double> Matrix2(start, end);
            double NumberofElements = Matrix2.size();
            double Root = sqrt(NumberofElements);
            const int n = Root;
              for(list<double>::iterator it = Matrix2.begin(); it != Matrix2.end(); it++){
                for(int i=0;i<n;i++){
                    vector <double> NewVector;
                    NewVector.push_back(Matrix2)

                }
              }
         }
} 

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

实现这一目标的一种方法是利用vector范围构造函数,并从一对迭代器构造每个vector到每个&#34;行&#34;的开头和结尾。在列表中。

std::vector<std::vector<double>> v2;
auto begin_row = matrix2.cbegin();
auto end_row = std::next(begin_row, n);
for (int i = 0; i != n; ++i, begin_row = end_row, std::advance(end_row, n))
  v2.emplace_back(begin_row, end_row);

编辑:或者这是另一种方法,创建一个正确大小的向量,然后遍历每个索引,这个在C ++ 03中工作:

std::vector<std::vector<double> > v2(n, std::vector<double>(n));
std::list<double>::const_iterator itr = matrix2.begin();
for (size_t i = 0; i != n; ++i)
  for (size_t j = 0; j != n; ++j)
    v2[i][j] = *(itr++);

Live demo Live demo C++03