向多维向量c ++添加元素

时间:2014-03-13 14:33:13

标签: c++ vector c++98

对于你们中的一些人来说,这似乎是显而易见的,但我试图在单行中向多维向量(更好地说向量向量)添加元素。 通常的方式可能是:

std::vector<int> vec1;
std::vector< std::vector<int> > vec_vec;
int a = 5; 
vec1.push_back(a);
vec_vec.push_back(vec1);

我尝试做的是将最后三行压缩成一行。我想知道是否可以这样做。
请注意,我不知道vec_vec的大小。我唯一知道的是插入元素的位置。

注意:我正在使用C ++ 98。

2 个答案:

答案 0 :(得分:3)

怎么样

using V = std::vector<int>;
std::vector<V> vec_vec;
vec_vec.push_back(V(1, 5));

或者只是(感谢melak47)

std::vector< std::vector<int> > vec_vec;
vec_vec.push_back({5});

std::vector< std::vector<int> > vec_vec;
vec_vec.emplace_back(1, 5);

第二个版本更短,第三个版本可能更高效,但这取决于优化。

答案 1 :(得分:1)

由于原始要求是能够在任意位置插入而不事先知道任何大小的代码,我认为最常见的解决方案是:

std::vector< std::vector<int> > vec_vec;

//assuming we want insert 5 at position [i][j] 
int i=3,j=4;

vec_vec.size() <= i ? (vec_vec.resize(i+1,std::vector<int>(j+1,0)), vec_vec[i][j]=5) : (vec_vec[i].size() <= j  ? (vec_vec[i].resize(j+1,0), vec_vec[i][j] = 5) : vec_vec[i][j] = 5);

在位置[3] [4]插入5,检查所有尺寸,并在必要时重新调整元件大小(所有新添加的元素默认初始化为0,所有已存在的元素保持不变,结果保证插入后至少为(i + 1)x(j + 1)大小。