首页
学习
活动
专区
圈层
工具
发布
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【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

    32910

    初识C++ · 模拟实现vector

    2 push_back和pop_back 尾插的时候要注意空间的扩容,扩容的判断条件即是_finish = _end_of_storage的时候,扩容方式和前面实现顺序表链表的时候没有什么区别,使用2倍扩容...,但是实际上vs下的vector扩容的时候是使用的1.5倍扩容,我们模拟实现的是linux下的vector,在string模拟实现的时候,我们拷贝数据使用的是strcpy,在这里因为是模板,所以不能使用字符串函数...这里有个隐藏的坑,到后面插入string类的时候才会显式出来,这里先不说,目前插入内置类型是没有问题的: void push_back(const T& val) { //判断扩容 if (...那么push_back就还有一个坑没有解决了,欲知后事如何,请看下去咯。...= last) { push_back(*first); first++; } } 以为结束了?

    17810

    【C++强基篇】学习C++就看这篇--->STL之vector使用及实现

    修改:insert、erase、push_back、pop_back、resize、reserve、operator=。输出:operator[]。结束:析构。下面我们;来一一介绍。...✨2.4 vector 修改 接口名称 接口说明 push_back(重点) 尾插 pop_back(重点) 尾删 find 查找(注意:这是算法模块实现的,不是 vector 的成员接口) insert...当然没有,如果这个也是个偶数,那就直接跳过去了,以此编译器直接检查了出来 //++it; //else // ++it;//这样写也是报错的,但是这样写在linux下是不会报错的,而且是正确的,但是一段代码总不能在...windows是错误的 //在linux下是正确的吧,所以这种写法本质就是错误的 //所以错误的本质原因是迭代器失效:当调用 v1.erase(it) 删除元素时: //被删除元素之后的所有元素会向前移动...修改接口:push_back / pop_back、insert / erase(配合迭代器使用)、swap。

    62010
    领券