用向量填充c ++中的简单动态数组[重复]

Posted

技术标签:

【中文标题】用向量填充c ++中的简单动态数组[重复]【英文标题】:fill a simple dynamic array in c++ with vector [duplicate] 【发布时间】:2018-11-03 19:40:50 【问题描述】:

我正在尝试填充动态二维数组 我哪里错了

#include<vector>
cin<<x;
vector<vector<int>> tab(x);
for (int i = 0; i < x; i++)
 
    for (int j = 0; j < x; j++)
    
        cin>>tab[i][j];
      

我还想把它打印到屏幕上

【问题讨论】:

假设它实际上是cin &gt;&gt; x;(注意运算符的方向)你有一个x向量的向量。这些向量tab[i] 是空的。要填写它们,请使用push_back() 【参考方案1】:

要创建给定大小的std::vectors 中的std::vector x,请使用

std::vector<std::vector<int>> foo(x, std::vector<int>(x));

要打印它,您可以使用循环:

for (std::size_t row; row < x; ++row) 
    for (std::size_t col; col < x; ++col)
        std::cout foo[row][col] << ' ';
    std::cout.put('\n');

拥有矩阵的更有效方法是使用行和列总大小的std::vector&lt;int&gt; 并相应地计算索引:

std::vector<int> foo(x * x);

// access column `c` at row `r` like
foo[r * x + c];

打印出来:

for(std::size_t i; i < x; ++i, std::cout.put('\n'))
    std::copy(foo.begin() + i * x, foo.begin() + (i+1) * x, 
              std::ostream_iterator<int>(std::cout, " "));

【讨论】:

【参考方案2】:
vector<vector<int>> tab(x)

这只是为tab 创建一个向量,而不是为子向量。

用途:

vector<vector<int>> tab(x, vector<int>(x));

同时填充子向量。

请注意,这不是创建矩阵的最有效方法。

【讨论】:

以上是关于用向量填充c ++中的简单动态数组[重复]的主要内容,如果未能解决你的问题,请参考以下文章

C ++中的动态长度数组[重复]

vc++ 中动态数组 ventor 的操作问题

在c ++中全局声明的动态数组的多个定义[重复]

C分配双精度的动态数组并用memset初始化它[重复]

用单个 char* 填充向量,指向 C 中 char* 数组的基数

c中可以定义变长数组吗