我有一个2D char
向量:
vector< vector<char> > matrix;
我将在矩阵中读取输入并将其存储在该向量中。我的矢量大小是固定的,是ROW x COL。我想我需要为每一行和每列重新调整大小。
如何在不占用额外内存(正确调整大小)的情况下完成它?
答案 0 :(得分:13)
鉴于向量为空,您只需使用预先分配的内部向量调整外部向量的大小,而无需循环:
matrix.resize(COL, vector<char>(ROW));
或者,当初始化或者如果要重置非空向量时,可以使用构造函数重载,使用大小和初始值初始化所有内部载体:
matrix = vector<vector<char> >(COL, vector<char>(ROW));
根据您的矩阵是专栏还是行专业,您需要交换参数ROW
和COL
。第一个(外部向量上的第一个参数)是您访问矩阵的第一个维度,即我假设您使用matrix[col][row]
访问它。
答案 1 :(得分:1)
const size_t ROW = 10;
const size_t COL = 20;
std::vector<std::vector<char>> v;
v.resize( ROW );
std::for_each( v.begin(), v.end(),
std::bind2nd( std::mem_fun_ref( &std::vector<char>::resize ), COL ) );
std::cout << "size = " << v.size() << std::endl;
for ( const std::vector<char> &v1 : v ) std::cout << v1.size() << ' ';
std::cout << std::endl;
答案 2 :(得分:0)
虽然由@leemes给出的向量大小为默认值的构造是一个很好的答案,但还有一种替代方法,而无需使用其他向量并复制ctor:
assert(COL >= 0);
assert(ROW >= 0);
vector<vector<char>> matrix;
for (size_t i{0}; i != COL; ++i)
{
matrix.emplace_back(ROW);
}