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