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\n”, v.begin()); // ERROR (might work, but not portable)


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

vector要注意的点的更多相关文章

  1. c++ vector 使用

    1. 包含一个头文件: 1 #include <vector> 2. 申明及初始化: std::vector<int> first; // empty vector of in ...

  2. Vector Tile

    Mapbox Vector Tile Specification A specification for encoding tiled vector data. <?XML:NAMESPACE ...

  3. ArrayList、Vector、LinkedList的区别联系?

    1.ArrayList.Vector.LinkedList类都是java.util包中,均为可伸缩数组. 2.ArrayList和Vector底层都是数组实现的,所以,索引数据快,删除.插入数据慢. ...

  4. ArrayList、Vector、HashMap、HashSet的默认初始容量、加载因子、扩容增量

    当底层实现涉及到扩容时,容器或重新分配一段更大的连续内存(如果是离散分配则不需要重新分配,离散分配都是插入新元素时动态分配内存),要将容器原来的数据全部复制到新的内存上,这无疑使效率大大降低. 加载因 ...

  5. Java中Vector和ArrayList的区别

    首先看这两类都实现List接口,而List接口一共有三个实现类,分别是ArrayList.Vector和LinkedList.List用于存放多个元素,能够维护元素的次序,并且允许元素的重复.3个具体 ...

  6. C++使用vector

    #include <iostream> #include <string> #include <vector> using namespace std; void ...

  7. [LeetCode] Flatten 2D Vector 压平二维向量

    Implement an iterator to flatten a 2d vector. For example,Given 2d vector = [ [1,2], [3], [4,5,6] ] ...

  8. C++ 数组array与vector的比较

    转:http://blog.csdn.net/yukin_xue/article/details/7391897 1. array 定义的时候必须定义数组的元素个数;而vector 不需要: 且只能包 ...

  9. vector定义初始化

    头文件 #include<vector> using std::vector; vector<T> v1; vector<T> v2(v1); vector< ...

  10. vector迭代器用法

    #include<iostream> #include<vector> using namespace std; int main() { vector<int> ...

随机推荐

  1. sass05 数据类型,数据运算

    /*! 数字类型 */ $n1: 1.2; $n2: 12; $n3: 14px; p{ font-size: $n3; } /*! 字符串类型*/ $s1: container; $s2: 'con ...

  2. AI目前的根本问题——缺乏 自由意志,无法分辨真正的善恶

    另一位对AI表现出极大兴趣的演讲嘉宾,就是短篇科幻小说<折叠北京>的作者:郝景芳. 演讲一开始她就提到了测试AI的三个问题: 第一个测试题,如果哥伦布没有发现新大陆对中国哪个菜系影响最大? ...

  3. django 笔记13 CSRF

    CSRF a. CSRF原理 b. 无CSRF时存在隐患 c. Form提交(CSRF) d. Ajax提交(CSRF) CSRF请求头 x-CSRFToken HTTP_X_CSRFToken dj ...

  4. java9新特性-15-全新的HTTP 客户端API

    1.官方Feature 110: HTTP 2 Client 2.使用说明 HTTP,用于传输网页的协议,早在1997年就被采用在目前的1.1版本中.直到2015年,HTTP2才成为标准.     H ...

  5. SharePoint UserProfileService 接口列表 注解

    Remove Leader 除去领袖 Add Leader  加领袖 Get leaders  获得管理员 Get Profile Scherna Get Profile Scherna Names ...

  6. 二维码扫描ZXing简化

    最近项目中有需要用到二维码扫描功能,于是查了相关资料,也没有过多地研究ZXing源码,只是有了最简单的功能,因为下载大牛的demo已经完全实现了功能,只是对其中的扫描线做了更改,需要的朋友可以直接使用 ...

  7. BZOJ 3626 LCA(离线+树链剖分+差分)

    显然,暴力求解的复杂度是无法承受的. 考虑这样的一种暴力,我们把 z 到根上的点全部打标记,对于 l 到 r 之间的点,向上搜索到第一个有标记的点求出它的深度统计答案.观察到,深度其实就是上面有几个已 ...

  8. CF981C(菊花图)

    题目描述 RAMESS知道很多关于树的问题(无循环的无向连通图)! 他创建了一个新的有用的树的划分,但他不知道如何构造它,所以他请求你的帮助! 划分是从树上的边中分裂出一些简单的路径,使得每个两条路径 ...

  9. Could not create connection to database server. Attempted reconnect 3 times. Giving up.错误

    项目是基于springboot框架,昨天从git上pull代码之后也没有具体看更改的地方,结果运行的时候就报错了. java.sql.SQLNonTransientConnectionExceptio ...

  10. Ubuntu上使用过的命令,Linux常用命令,mount 硬盘挂载, ls 列表list命令,cp 复制copy命令,mkdir 创建文件夹 ,nano 编辑器,cat 文档合并,chmod 文件权限,ssh win10连接ubuntu服务器的步骤

    man 帮助 > man ls # ubuntu的帮助 tar.gz 压缩解压 > tar -zcvf yzn.tar.gz /home/yzn # 压缩 > tar -zxvf y ...