STL vector注意问题

vector<int> v;

1. v[i]不进行越界检查,v.at(i)进行边界检查。

2. reserve和capability相对,是关于vector的容量
    v.reserve(i);
    v.capability()至少为i。
    reserve操作不改变vector中的内容。通常,如果知道要向容器中放入的元素数目,可先调用reserve以避免不必要的重新内存分配。

3. size和resize相对
    size()返回容器中实际元素的个数;
    resize会在容器的尾部添加和删除一些元素(添加通过默认构造函数),来调整容器中的实际内容。

4. 在不修改元素时,使用const_iterator

5. 循环时使用,!= 判断是否达到容器尾部

6. 尽量使用前缀形式的--或++

    for(vector<int>::const_iterator i = v.begin(); i < v.end(); ++i)
        cout<<(*i)<<"/n";   //endl会迫使输出流刷新其内部缓冲区,降低效率
   
7. 使用标准库

    copy( v.begin(), v.end(), ostream_iterator<int>(cout, "/n") );

8. 避免使用vector<bool>

    bool *pb = &vec_bool[0];
    编译不能通过,因为vector<bool>内部是通bit来表示bool,v[0]的返回值是一个代理对象,
    vector<bool>::reference *pb = &vec_bool[0];

    如果需要存储bool类型,可以用deque<bool>,它里面存储的是真正的bool类型;而且deque的接口与vector基本完全一致,除了reserve和capacity。当然deque中的内存是不连续的,不给传给C API。

    如果要存储bit类型,可以用bitset。与STL容器不同,它的大小在编译时就确定了,所以不能插入和删除元素。
bitset<1000> bs;
bs[5] = 1;
cout<<bs.to_ulong()<<"/n";
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值