python在线免费网站,淄博找能做网站的公司,自己做网站怎么编代码,注册网站模板首先#xff0c;两个函数的功能是有区别的#xff1a; reserve是容器预留空间#xff0c;但并不真正创建元素对象#xff0c;在创建对象之前#xff0c;不能引用容器内的元素#xff0c;因此当加入新的元素时#xff0c;需要用push_back()/insert()函数。 resize是… 首先两个函数的功能是有区别的 reserve是容器预留空间但并不真正创建元素对象在创建对象之前不能引用容器内的元素因此当加入新的元素时需要用push_back()/insert()函数。 resize是改变容器的大小并且创建对象因此调用这个函数之后就可以引用容器内的对象了因此当加入新的元素时用operator[]操作符或者用迭代器来引用元素对象。 其次两个函数的形式是有区别的 reserve函数之后一个参数即需要预留的容器的空间 resize函数可以有两个参数第一个参数是容器新的大小第二个参数是要加入容器中的新元素如果这个参数被省略那么就调用元素对象的默认构造函数。 初次接触这两个接口也许会混淆其实接口的命名就是对功能的绝佳描述resize就是重新分配大小reserve就是预留一定的空间。这两个接口即存在差别也有共同点。下面就它们的细节进行分析。 为实现resize的语义resize接口做了两个保证 一是保证区间[0, new_size)范围内数据有效如果下标index在此区间内vector[indext]是合法的。 二是保证区间[0, new_size)范围以外数据无效如果下标index在区间外vector[indext]是非法的。 reserve只是保证vector的空间大小(capacity)最少达到它的参数所指定的大小n。在区间[0, n)范围内如果下标是indexvector[index]这种访问有可能是合法的也有可能是非法的视具体情况而定。 resize和reserve接口的共同点是它们都保证了vector的空间大小(capacity)最少达到它的参数所指定的大小。 因两接口的源代码相当精简以至于可以在这里贴上它们 void resize(size_type new_size) { resize(new_size, T()); } void resize(size_type new_size, const T x) { if (new_size size()) erase(begin() new_size, end()); // erase区间范围以外的数据确保区间以外的数据无效 else insert(end(), new_size - size(), x); // 填补区间范围内空缺的数据确保区间内的数据有效 例子 vectorint myVec; myVec.reserve( 100 ); // 新元素还没有构造, // 此时不能用[]访问元素 for (int i 0; i 100; i ) ...{ myVec.push_back( i ); //新元素这时才构造 } myVec.resize( 102 ); // 用元素的默认构造函数构造了两个新的元素 myVec[100] 1; //直接操作新元素 myVec[101] 2;