首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【C++】STL 模拟实现之 vector

    2、扩容机制 vector 的扩容机制和 string 的扩容机制是一样的,因为它们都是动态增长的数组:VS 下大概是 1.5 被扩容,Linux g++ 下是标准的二倍扩容,测试用例如下: void...6、修改 – 迭代器失效 vector 提供了如下接口来进行修改操作: assign && push_back && pop_back assign 函数用来替换 vector 对象中的数据,支持 n...以后我们如果要在中间插入或删除元素的话,必须配合算法库里面的 find 函数来使用: 同时,在 VS 下,insert 和 erase 之后会导致 pos 迭代器失效,如果需要再次使用,需要更新 pos,如下: 不过,在 Linux...做了一些基本的介绍,知道了 STL 由原始版本主要发展出了 PJ、RW 和 SGI 版本,其中,微软的 VS 系列使用的就是 PJ 版,但是由于其命名风格的原因,我们阅读源码时一般选择 SGI 版,而且 Linux...中的迭代器是一个类,当我们进行 insert 或者 erase 操作之后,iterator 中的某个函数可能会将 pos 置为空或者其他操作,导致再次访问 pos 报错,除非我们每次使用后都更新 pos: 而 Linux

    46500

    【c++】vector以及vector的模拟实现

    因此删除vector中任意位置上元素时,vs就认为该位置迭代器失效了 注意:Linux下,g++编译器对迭代器失效的检测并不是非常严格,处理也没有vs下极端 从上述三个例子中可以看到:SGI STL中,...cout << "扩容之后,vector的容量为: " << v.capacity() << endl; // 经过上述reserve之后,it迭代器肯定会失效,在vs下程序就直接崩溃了,但是linux...程序输出: 1 2 3 4 5 扩容之前,vector的容量为: 5 扩容之后,vector的容量为 : 100 0 2 3 4 5 409 1 2 3 4 5 // 2. erase删除任意位置代码后,linux...= last) { push_back(*first); ++first; } } //vector v1 = {1,2,3,4,5,6,7,8,9,10}...; vector(initializer_list il) { reserve(il.size()); for (auto& e : il) { push_back

    6610
    领券