我有2D char
矢量:
vector< vector<char> > matrix;
我将读取矩阵作为输入并将其存储在该向量中。我的向量的大小是固定的,是ROW x COL。我想我需要为每一行和每一列调整大小。
我如何在不占用额外内存的情况下(正确调整其大小)完成它?
给定向量为空,您可以简单地使用预先分配的内部向量来调整外部向量的大小,而无需循环:
matrix.resize(COL, vector<char>(ROW));
或者,当初始化时,或者如果您想重置非空向量,则可以使用构造函数重载,并使用大小和初始值来初始化所有内部向量:
matrix = vector<vector<char> >(COL, vector<char>(ROW));
取决于矩阵是列为主还是行为主,您需要交换参数ROW
和COL
。第一个(外部矢量上的第一个参数)是您访问矩阵的第一个维度,即我假设您使用matrix[col][row]
访问它。
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;
虽然由@leemes给出的向量大小为默认值的构造是一个很好的答案,但有一种替代方法,无需使用其他向量并复制ctor:
assert(COL >= 0);
assert(ROW >= 0);
vector<vector<char>> matrix;
for (size_t i{0}; i != COL; ++i)
{
matrix.emplace_back(ROW);
}