我有一个包含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)
}
}
}
}
有什么建议吗?
答案 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++);