vector(动态数组)
vector是STL的动态数组,在运行时可以根据需要改变数组大小,并且其内存空间是连续的,所以可以在常数的时间内完成索引。需要注意的是,如果数组的空间不够,会自动重新申请一块和原来的空间一样大的空间,所以使用vector有可能会导致空间占用过大,也会影响它的效率。
1. 定义方法:
类型 | 例子 | 说明 |
---|---|---|
int | vector < int > a; | 默认初始化,a为空 |
int | vector < int > b(a); | 用a定义b |
int | vector < int >a(100) | a有100个值为0的元素 |
int | vector < int >a(100,6) | 有100个值为6的元素 |
string | vector< string > a(10,“hello”) | 十个值为hello的元素 |
string | vector < string > b (a.begin( ),a.end( )); | b是a的复制 |
结构体 | struct point {int x, y ; } ; vector < point > a ; | 定义结构体a |
多维数组 | vector < int > a[MAXN] ; | 定义一个二维数组第一维大小固定,第二维是动态的 |
2.常用操作:(a为vector名)
1. 赋值:a.push_back(100) ; 给尾部元素赋值100。
2. 元素个数:a.size( ) ; 返回元素个数。
3. 是否为空:a.empty( ) ; 判断是否为空。
4. 输出:直接当作正常数组输出 ,比如cout<<a[0]<<endl;
5. 中间插入:a.insert( a. begin( ) + i , k) ; 在第i个元素前面插入k。
6. 尾部插入:a.insert( a.end( ) , 10 ,5 ) ; 尾部插入10个值为5的变量。
7. 删除尾部:a.pop_back();
8. 删除区间:a.erase(a.begin( )+ i , a.begin( ) + j) ; 删除区间 [ i , j - 1 ]的元素。
9. 删除元素: a.erase(a.begin( ) + 2) ; 删除第三个元素。
10.调整大小:a.resize( n ) ; 数组大小变为n。
11.清空:a.clear( ); 清空a这个数组。
12.翻转:reverse(a.begin( ) , a.end( ) ) ; 用reverse翻转数组。
13.排序:sort(a.begin( ),a.end( ) ) ; 用sort排序。
例题:HUD 4841