将元素添加到多维矢量C 中

adding an element to multi-dimensional vector c++

本文关键字:元素 添加      更新时间:2023-10-16

对你们中的某些人来说似乎很明显,但是我试图在单行。通常的方法可能是:

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。

怎么样
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);

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

由于原始要求是能够以任何位置插入 而又不知道一行代码中的任何尺寸,所以我认为大多数通用解决方案都是:

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)。