以下是关于std::vector::push_back()的一些好奇行为: 性能:push_back()操作的时间复杂度为O(1),即它的执行时间与向量的大小无关。这是因为std::vector在内部实现时,预留了一些额外的空间,以便在添加新元素时不需要频繁地重新分配内存。 自动扩容:当std::vector的容量不足以容纳新元素时,它会自动分配更...
v1.push_back(30); v1.push_back(40); v1.push_back(50); printVector(v1); // 尾删 v1.pop_back(); printVector(v1); // 插入 第一个参数是迭代器 v1.insert(v1.begin(), 100); printVector(v1); v1.insert(v1.begin(), 2, 1000); printVector(v1); //删除 v1.erase(v1.b...
vector在push_back以成倍增长可以在均摊后达到O(1)的事件复杂度,相对于增长指定大小的O(n)时间复杂度更好。 为了防止申请内存的浪费,现在使用较多的有2倍与1.5倍的增长方式,而1.5倍的增长方式可以更好的实现对内存的重复利用。 __EOF__
#include<cstdlib>#include<vector>#include<chrono>intmain(){autoroll=[](){return(std::rand()%10)+1;};std::vector<int>container;container.push_back(roll());constint*pAddressOrignItemZero=&(*container.begin());std::chrono::duration<double>durInsertTime(0);for(inti=0;i<10;i++){consti...
pop_back(x)就是删除vector的尾元素x,时间复杂度为O(1)。 1.3.3、size()函数 用来获得vector中元素的个数,时间复杂度为O(1)。 1.3.4、clear()函数 用来清空vector所有的元素,时间复杂度为O(N),N为元素总个数。 1.3.5、insert()函数 用insert(it,x)往vector的任意迭代器it初传入一个元素x。时间复杂...
vi.pop_back();//删除尾元素 for(inti=0;i<vi.size();i++){ cout<<vi[i]<<" "; } cout<<endl; return0; } 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. (3)size() 获得vector中元素个数,时间复杂度O(1) 类型unsigned %d输出也没问题 ...
void push_back(const value_type & value);例:v.push_back(222);时间复杂度:虽然有可能出现时间复杂度O()的扩容操作,但是由于时间均摊给每一步,时间复杂度还是O(1)void pop_back();例:v.pop_back();注意:1.first和last不能是对象自身的迭代器,否则是未定义行为 2. 如果新的 size()大于旧的 ...
cout << g_vec[0] << endl; //时间复杂度 1 g_vec.pop_back(); //删除 cout << g_vec.size() << endl; g_vec.push_back(12); g_vec.push_back(23); //插入 vector <int>::iterator theIterator = g_vec.begin(); g_vec.insert(theIterator,1,33); ...
时间复杂度:单次删除操作(如 erase 或pop_back)的时间复杂度通常为 O(n),其中 n 是 std::vector 中剩余元素的数量。这是因为删除操作可能需要移动剩余元素以填补被删除元素的位置。 内存分配:如果删除操作导致 std::vector 的大小减少到其容量的一半以下,某些实现可能会触发内存重新分配以减小容量,这会增加额外...
1.pop_back——尾删 int main(){vector <int> v1(4, 100);for (auto e : v1){cout << e << " ";}cout << endl;v1.pop_back();for (auto e : v1){cout << e << " ";}cout << endl;return 0;} 2. 指定位置删除——erase ...