c++ - 如何将列表分成多个 vector ?

标签 c++ list vector insert

我有一个包含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

关于c++ - 如何将列表分成多个 vector ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27400410/

相关文章:

c++ - 何时对 GCC 使用 -g 标志

c++ - 如何在 C++ 中设置空对象 vector ?

assembly - 在混合上下文中选择 SSE 指令执行域

c++ - unique_ptrs 的循环 vector 并为运行时类型调用正确的重载

c++ - 我如何验证重构保留了代码流,而不仅仅是行为?

c++ - 如何让 call_once() 在构造函数中正常工作?

java - 将对象 w.r.t 列表排序为特定成员/状态

arrays - Groovy,整理列表导致并发修改异常

c++ - 没有线程安全开销的 QSharedPointer?

list - 在 SharePoint 2010 列表中的文件夹之间移动项目