C++ 当我调整这个向量的大小时会发生什么 std::vectof向量; 调整大小(10);

C++ 当我调整这个向量的大小时会发生什么 std::vectof向量; 调整大小(10);,c++,vector,C++,Vector,向量的0-9位是什么?std::vector的实例 如果是,这是否合法: std::vector<std::vector<int>> vecOfVecs; vecOfVecs.resize(10); std::vector*pToVec=&(vecOfVecs[0]); pToVec->推回(10); 有一个默认的第二个参数resize,它告诉您要在附加空间中插入什么值。如果未指定该值,则使用默认构造值 std::vector<int> *pToVec =

向量的0-9位是什么?std::vector的实例

如果是,这是否合法:

std::vector<std::vector<int>> vecOfVecs;
vecOfVecs.resize(10);
std::vector*pToVec=&(vecOfVecs[0]);
pToVec->推回(10);

有一个默认的第二个参数
resize
,它告诉您要在附加空间中插入什么值。如果未指定该值,则使用默认构造值

std::vector<int> *pToVec = &(vecOfVecs[0]);
pToVec->push_back(10);
如果
n
大于当前容器大小,则通过在末尾插入所需数量的元素来扩展内容,以达到
n
的大小。如果指定了
val
,则新元素将初始化为
val
的副本,否则,它们将被值初始化


你的例子是完全合法的:你的向量向量将包含十个空向量。

是的,位置0-9将是
std::vector
的空实例,就像你说的那样

void resize (size_type n, value_type val = value_type());
for(size\u t i=vecOfVecs.size();i<10;++i){
向后推(std::vector());
}
C++03中
std::vector::resize
的“规范”定义实际上有两个参数,而不是一个,第二个参数是用作新创建元素的“填充值”的元素值。第二个参数的默认参数等于元素类型的值初始化对象。这意味着你的电话

for (size_t i = vecOfVecs.size(); i < 10; ++i) {
    vecOfVecs.push_back(std::vector<int>());
}
实际上被翻译成

vecOfVecs.resize(10);
调整大小(10,std::vector()); 打电话。也就是说,实际上是您隐式提供了
std::vector
的默认构造实例,用作所有新元素的初始值设定项

您的
pToVec->push_back(10)
呼叫完全合法


C++11对
resize
的定义做了一些无关紧要的更改(在此上下文中),但总体效果保持不变:新元素为您初始化了值。调用
resize

完全合法后,即可立即使用它们。C++11将其更改为有两个重载:
resize(size\u type)
resize(size\u type,const T&)
(没有默认参数)。在C++11
resize(n)
中,默认构造创建的元素,而在C++03中,默认构造默认参数,然后复制构造创建的元素。
vecOfVecs.resize(10, std::vector<int>());