免费1级做爰片在线观看 历史网站/深圳市社会组织总会
C++库中给了许多vector的接口如下,学习vector先认识一些常用的接口用法,然后模拟实现加深理解。
首先我们先简单讲解一下vector的接口用法,它底层是一段动态开辟的空间,然后它提供了许多接口:
1.构造
第一个first是默认构造,第二个是用4个100进行构造,第三个是运用迭代器进行构造,第四个是拷贝构造。
2.=运算符重载
直接类比内置类型的赋值。实际上该运算符的实现是利用了拷贝构造而且是深层拷贝。
3.迭代器
迭代器的使用和string比较类似,都是一个函数。
4.size
size函数时返回vector中元素的数量。使用是可以这样写:
5.resize
resize是改变空间大小并初始化,但是一般不进行缩容。我们调试来看,库中给的原型如下:
如果我们不写会默认用缺省值初始化进行初始化,写的话利用该值进行初始化。
6.reserve
与resize不同,它进行扩容时不会进行初始化,仅仅会扩容,我们调试来看:
库中的原型函数如下:
7.【】访问和at
与stringl类似,vector容器也支持进行下标访问,at与[]类似,但是它们区别是at发生错误时抛异常但是[]直接报错.
8.assign
assign的作用是追加元素,支持两种写法一种是迭代器另一种是直接给要赋值的个数和该值。
9.push_back和pop_back(尾插和尾删)
push_back的作用就是尾插,pop_back的作用是尾删.
10.insert和erase
insert的作用是在指定位置之前插入,vector给出的方法需要用迭代器实现。支持单个值插入,也支持多个值插入,也支持从别的vector中进行插入。我们演示第三个:
erase和insert类似,也是利用迭代器进行删除。
但是这里需要主要它们使用时会有迭代器失效的问题,原因是我们假如it指向下标0,那么我们插入之后it是否还是指向下标0呢?vs这里是强制检查进行报错,如果我们想要连续使用it需要对它进行重新赋值。我们可以看到如果我们不对它进行重新赋值,那么It使用一次后就会失效掉,再次使用it会进行报错。
我们对it进行赋值即可,这里我认为insert插入是一个一个向后移动元素,所以insert之后还是指向下标0的,但是如果是erase的话,如果我们刚好删除最后一个元素,it刚好会越界访问,为了防止这种情况,vs对它进行强制检查,但是有的编译器下并不会进行强制检查,但是为了平台的统一性,我们统一对it进行重新赋值后使用。erase与Insert类似,是相同的道理。