zoukankan      html  css  js  c++  java
  • vector要注意的点

    vector的元素类别T,必须具备assignable和copyable两个性质。

    vector的容量很重要:

    1. 一旦内存重新配置,和vector元素相关的所有references、pointers、iterators都会失效。

    2. 内存重新分配很耗时间。

    所以,如果程序管理了和vector元素相关的references、pointers、iterators或执行速度至关重要,就必须考虑容量问题。

    可以使用reserve()保留适当容量,避免一再重新分配内存。

    可以利用如下语句缩减容量:

    std::vector<T>(v).swap(v);

    注意,上面前面括号里的v不能缺少

    作用相当于:

    作用相当于:

    {

    std::vector<T>  temp(X);

    temp.swap(X);

    }

    然后临时对象会被释放

    注意vector的clear方式是清空所有元素。而因为vector的空间是只增不减,所以要压缩空间,就需要用到上面的方法。

    c1 = c2:将c2的全部元素赋值给c1

    c.assign(n, elem):复制n个elem,赋值给c

    c.assign(beg, end):将区间[beg;end]内的元素赋值给c

    c1.swap(c2):将c1和c2元素互换

    swap(c1, c2):同上。此为全局函数


    operator[]、front()、back(),不做范围检查,如果发生越界错误,会引发未定义行为。所以使用时,必须确定索引有效。

    std::vector<Elem> coll;

    if (coll.size() > 5) {

      coll[5] = elem;

    }

    if (!coll.empty()) {

      cout << coll.front();

    }


    vector迭代器持续有效,除非发生两种情况:(1)在一个较小索引位置上安插或移除元素;(2)由于容量变化而引起内存重新分配。


    移除“与某值相等”的所有元素

    std::vector<Elem> coll;

    // remove all elements with value val

    coll.erase(remove(coll.begin(), coll.end(), val), coll.end());

    注意:remove是不删除元素的


    只移除“与某值相等”的第一个元素

    std::vector<Elem> coll;

    // remove first element with value val

    std::vector<Elem>::iterator pos;

    pos = find(coll.begin(), coll.end(), val);

    if (pos != coll.end()) {

      coll.erase(pos);

    }


    vector元素分布于连续空间中,所以有:&v[i] == &v[0] + i


    千万不要把迭代器当做元素地址来传递,vector迭代器由实作版本定义,也许并不是一般指针。

    printf(“%s ”, v.begin()); // ERROR (might work, but not portable)


    如果需要静态大小的bitfield,应当使用bitset,而不是vector<bool>。

  • 相关阅读:
    送给每天用电脑超4小时的朋友!!
    股票技术指标分析详细
    2003安装新版MSN9的方法 / MSN9 for 2003
    买卖股票基本原则新手参考
    更改Windows软件默认安装路径
    永不套牢的方法(教你正确止损)
    股票的技术参数很多,图线参数常见的有这些
    教育网ftp大全
    【笔记】【汇编语言】第4章 第一个程序
    【笔记】【汇编语言】第2章 寄存器
  • 原文地址:https://www.cnblogs.com/charlesblc/p/6485566.html
Copyright © 2011-2022 走看看