代码改变世界

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); 实现