用向量填充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 >> 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<int>
并相应地计算索引:
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 ++中的简单动态数组[重复]的主要内容,如果未能解决你的问题,请参考以下文章