【C/C++】容器之 vector

Backto C/C++ Index


vector 是 C++ 中最常用的容器, 一方面用来替代 C 中的数组, 另一方面引入了 C++ STL 风格的通用功能, 很酷很强大. 但同时也要注意两种风格混用的时候, 容易出问题.

初始化

数组方式: 给定容量 + 下标访问

vector<int> vec(5); // sameto => int arr[5]; but vec will be initalized as [0,0,0,0,0]
vector<int> vec(3, -1); // vec will be initalized as [-1,-1,-1]

int arr[5] = {1,2,3,4,5}
vector<int> vec(arr, arr+4); // copy elems from array

STL 风格

// copy & assignment constructors
vector<int> vec1; 
vector<int> vec2(vec1); 
vec3 = vec1; 

// add elem one by one
vector<int> vec;
vec.push_back(1);
vec.push_back(2);

混用

vector<int> vec(5)
vec.push_back(5);

注意此时的 vec 内容是 0,0,0,0,0,5.

访问

访问的时候就会涉及到 vector 的 capacitysize, size 是 vector 中当前存储的真实元素的个数, capacity 是 vector 当前可存储的最大元素个数. vector 支持动态扩容, 初始 capacity=4, size=0; 当 size=4 且再push_back 进去元素时, vector 会自动翻倍扩容并且把之前的元素按顺序 copy 过去, 再添加新元素. 这一步扩容非常耗时耗空间, 所以, 最好在初始化时候就给定大小.

数组方式: 通过下标

vec[2];

STL 风格: 通过迭代器

iterator 是标准库中的类,它具有指针的功能
*it : 对迭代器解引用,并访问其指向的实际对象
++it: 向前移动迭代器 it 使其指向下一个元素

vector<int>::iterator iter = vec.begin();
for(;vec!= vec.end();++iter)
	cout << *iter << endl;

混用

有时候已知大小, 但是又需要依次 push_back的话, 可以这样

vector<int>::iterator vec(100);
vector<int> iter = vec.begin();
for(...)
	... *iter++ ...
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值