STL::vector

1,vector 是一个可以动态增长的容器,其访问方式和 array 一样可以进行随机访问,不同的是 vector 在分配存储空间时不是一次一个空间的分配,而是会分配多余的空间,这样在新插入数据时,可以避免 再次分配存储空间的操作造成的性能损失,从而达到一个性能和内存的平衡。

Iterator有下面的几种:

begin:

end:

rbegin:

rend:

cbegin:

cend:

crbegin:

crend:

Capacity

size:  Returns the number of elements in the vector,返回 vector 中元素的个数,不一定和 capacity 相同

max_size:

resize: 重新设置 vector 的 容量(size 变化),并不改变当前容器的 capacity(capacity 不变)。如若比当前容量小,则把后面的数据销毁,如若比当前容量大,若没有指定确切的值,则填充值为初始化值,否则填充为指定的确切值。两种语法:resize(size_type n);   resize(size_type n,const value_type& val);

capacity:  Return size of allocated storage capacity,返回当前已经分配的容量大小,单位为当前可容纳该类型的元素个数。测试为:1,2,4,8,16

empty:

reserve:翻译为:保留,预留。解释: 更改第一次分配的容量大小,如若 myvector.reverse(100),则此时容量为100,跳过了从 1,2,4,8,16 增长的过程。reverse(size_type n),如果 n 比当前容量大,则动态分配容量到 n; 如果 n 比当前容量小,则不改变当前容量,也不改变当前容器内的内容。

 

shrink_to_fit:  Requests the container to reduce its capacity to fit its size,这也许会导致内存重分配情况的发生,但是不会改变容器的 size 和 容器内的元素。

Element access:

operator[ ]:

at:

front:

back:

data: 用法同 array 中的 data;

Modefiers

assign: 为 vector 分配新的内容以代替它原来的内容,其 size 也跟着变化。三种使用方式:assign(InputIterator first,InputIterator last),用一个起始迭代器,一个终止迭代器进行新内容的填充,这两个迭代器可以来自另一个 vector 。assign(size_type n,value_type& val): fill 方式;assign(initializer_list<value_type> li): 用别的序列进行填充,例如数组。

1   int myints[] = {1776,7,4};
2   third.assign (myints,myints+3);   // assigning from array.

push_back:

pop_back:

insert: single element; fill; range; move; initializer list; 5种填充方式;note:iterator  的有效性;(任何改变vector长度的操作都会使已存在的迭代器失效,就不能再信赖迭代器指向的值了)返回值为:新插入的第一个元素的迭代器; https://wenku.baidu.com/view/1b325dc7aa00b52acfc7cafb.html

erase:返回删除元素的下一个元素的迭代器,如果删除的是最后一个元素,则指向该容器的末尾(myvector.end()); 范围删除: [first,end)

swap:  用法:swap (vector& x); 交换两个 vector 的内容;两个vector 可能 size 并不相同。但迭代器仍然保持有效,原来指向的元素不发生变化。

clear:  清空 vector 的元素,但 capacity 可能仍不发生变化,如若要重新分配空间,用:vector<T>().swap(x);// clear x reallocating

emplace(c++11):功能类似于 insert ,不同之处参见:https://blog.csdn.net/penghuicheng/article/details/51505625

emplace_back(c++11): 功能类似于 push_back,不同之处同上。

Construct vector: default; fill; range; copy; move; initializer list;

posted on   爱笑的张飞  阅读(198)  评论(0编辑  收藏  举报

编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示