exceptional c++ 读书笔记 一 . vector 的使用
2016-05-04 21:39 NicGanon 阅读(186) 评论(0) 编辑 收藏 举报一. at() 与 operator[]
void f(vector<int>& v) {
v[0];
v.at(0);
}
对于 vector 中的元素的随机访问有两种方式operator[] 和 at() , 两种方式的区别主要就是
- at() 函数会进行边界检查,对于越界会抛出异常std::out_of_range
- operator[] 不会进行边界检查,如果越界可能直接引起程序crash
正因为上述区别,at() 每次都会进行边界检查,因此导致速度不如 operator[] 快。
二. resize,size 与 reserve,capacity
- size()返回一个vector中的元素个数
- capacity()返回当前vector具有的容量大小,即最多可以容纳多少个元素而不需要重新申请内存。
需要注意capacity()返回的大小与元素个数之前的区别
int main() {
vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
cout <<"size: " << v.size() << " ,capacity: " << v.capacity() << endl;
return 0;
}
-程序结果: size: 3 ,capacity: 4
- void resize (size_type n, value_type val = value_type()); 重置vector中元素的个数,如果size() > n,则多余的会被舍弃,如果size() < n 则将在尾部插入部分数据,插入的数据即可以通过val制定定值,也可以不指定,会根据类型设定不同的默认值
- void reserve (size_type n); 重置vector的容量,如果 n > capacity(),则将重新按照 n 的大小申请一块新的内存,如果小于则不会进行缩小。
ps:缩小容量可以通过 vector(v).swap(v); 实现