动态数组(vector)

时间:2020-12-18 12:29:26   收藏:0   阅读:2

1.功能介绍
vector底层就是一个数组,当你向该数组中添加元素不足时自动扩大。
2.常用命令
(1)vector a;
定义一个数据元素类型为 int 的 vector。类型可以为任何的基本类型,如 int、double、char、结构体、甚至vector,如二维vector a:

vector<vector<int>> a;

(2)a.clear();
初始化,清空数据,但是不会释放内存,如首先分配了 10,000 个字节,然后erase掉后面9,999 个,则虽然有效元素只有一个,但是内存占用仍为 10,000个。但是大部分是不会卡内存的,除非多组数据+数据量很大。
(3)向尾部插入a

a.push_back(a);

(4)a.size()
vector 当前元素个数,下标从 0 开始
如遍历 vector :

for(int i=0; i < a.size(); i++) cout<<a[i]<<” “;

(5)遍历 vector

vector<int>::iterator it;
//it 是 vector 的迭代器,我们也可以用迭代器遍历vector,如:
for(it=a.begin();it!=a.end();it++) cout<<*it<<endl;
//a.begin()是起始元素地址,a.end()是最后元素的下一个地址,*it 是元素的值。
(6)引用 vector 下标为 x 的元素。
```cpp
a[x]

(7)对 vector 内的数据元素进行排序。

sort(a.begin(),a.end(),cmp)

(8)在第 i+1 个元素前面插入 x

a.insert(a.begin()+i,x);。

(9)删除第 c 个元素。

a.erase(a.begin()+c-1);

(10)删除 i 到 j-1 这个区间的元素

a.erase(a.begin()+i,a.begin()+j);//insert 和 erase 操作是 o(n)的,时间复杂度大,不推荐使用。

3.应用举例:边的存储

struct EDGE {
	int u,v,w; //表示一条从 u 到 v 权值为 w 的有向边
	EDGE (int a, int b, int c) {
		u=a, v=b, w=c;
	}
};
vector<EDGE> e[N];
e[a].push_back(EDGE(a,b,c));//插入边
//存储一条以 a 为起点的有向边
评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!