Vector(动态数组)

头文件

1
#include<vector>

初始化

  1. 定义一个vector 未初始化 输出 0
1
vector<int> a;	
  1. 定义一个长度为3 的vector 未初始化 输出 0
1
vector<int> a(3);	
  1. 定义一个长度为10 的vector 每个数赋值为 3
1
vector<int> a(10,3);	
  1. 将向量b中从下标 0 1 2(共三个)的元素赋值给a ,a 的类型为int型
1
vector<int> a(b.begin(),b.begin+3);	
  1. 从数组中获得初始值
1
2
int b[7] = {1,2,3,4,5,6,7}
vector<int> a(b,b+7);
  1. 输出
1
2
3
4
for(auto x:a)
{
cout << x << " ";
}

size()

1
a.size()    // 返回元素个数

resize()

1
a.resize()    // 改变大小

empty()

1
2
a.empty();    
// 判断a是否为空,空则返回true,非空则返回false

front() 和 back()

1
2
3
4
a.front();
// 返回a的第一个元素,当且仅当a存在
a.back();
// 返回vector的最后一个数

倍增思想

C++ 系统为某一程序分配空间的所需时间,与空间大小无关,与申请次数有关如果申请一个空间为1000 和 空间 为1 申请1000 次的所需时间差别是很大的,申请次数越多,越耗时间。

clear()

1
2
a.clear();
//清空a中的元素

支持比较运算

比较操作 == , != , < , > , <= , >=

1
2
3
4
5
6
7
8
9
10
int main()
{
//支持比较运算
vector<int> a(4,3),b(3,4);
// a: 3 3 3 3 b: 4 4 4
//比较原理 字典序 (根据最前面哪个判断,如果一样就往后比较)
if(a < b)
cout << "a < b" << endl;

}

push_back() 和 pop_back()

1
2
3
4
a.push_back(5);
// 在a的最后一个向量后插入一个元素,其值为5
a.pop_back();
//删除a向量的最后一个元素

begin()和end()

1
2
3
a.begin();  // vector的第0个数;
a.end(); // vector的最后一个数的后面一个数
通常与for循环结合使用

遍历vector的三种方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
nt main()
{
vector<int> a;
for(int i=0;i<10;i++)
{
a.push_back(i);
}
// 三种遍历vector的方法
//第一种
for(int i=0;i<a.size();i++)
{
cout << a[i] << " " ;
}
cout << endl;
// 第二种
for(auto i=a.begin();i!= a.end();i++)
{
cout << *i << ' ';
}
cout << endl;
// 第三种 C++11 新语法
for(auto x:a)
{
cour << x << " ";
}
cout << endl;
return 0;
}

结合算法erase() reverse()

1
2
3
4
5
6
7
8
9
10
11
12
#include<iostream>
#include<vector>
#include<algorithm>
int main()
{
a.erase(b); //从a中删除迭代器p指定的元素,p必须只想c中的一个真实元素,不能是最后一个元素 end()
a.erase(b,e); // 从a中删除迭代器对b和e所表示的范围中的元素,返回e

vector<int> a={1,2,3,4,5};
reverse(a.begin(),a.end()); //a的值为 5,4,3,2,1 倒置

}