我有一个包含n个元素的列表。这些元素创建矩阵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)

                }
              }
         }
}


有什么建议么?

最佳答案

实现此目标的一种方法是利用vector范围构造函数,并构造从一对迭代器到列表中每个“行”的开头和结尾的每个vector

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

10-07 14:39
查看更多