1、 vector特点:
vector:就是动态数组,它也是在堆中分配内存,元素连续存放,有保留内存,如果减少大小后,内存也不会释放.如果新值>当前大小时才会再分配内存。
它拥有一段连续的内存空间,并且起始地址不变,因此它能非常好的支持随即存取,即[]操作符,但由于它的内存空间是连续的,所以在中间进行插入和删除会造成内存块的拷贝,另外,当该数组后的内存空间不够时,需要重新申请一块足够大的内存并进行内存的拷贝。这些都大大影响了vector的效率。
对最后元素操作最快(在后面添加删除最快 ),此时一般不需要移动内存,只有保留内存不够时才需要。
对中间和开始处进行添加删除元素操作需要移动内存,如果你的元素是结构或是类,那么移动的同时还会进行构造和析构操作,所以性能不高(最好将结构或类的指针放入vector中,而不是结构或类本身,这样可以避免移动时的构造与析构)。
2、 基本用法:
#include<vector>
#include<iostream>
using namespace std;
int main()
{
//vector几种构造方法:
vector<int> vec1(3,3); //1.vec1内容为3,3,3
vector<int> vec2(vec1); //2.vec2内容为3,3,3
int a[] = { 1,2,3 };
vector<int> vec3(a, a + 3); //3.vec3内容为1,2,3
vector<int> vec4(vec3.begin(), vec3.end()); //4.vec4内容为1,2,3
//vector几种赋值方法:push_back、insert、 assign
vec1.push_back(4); //vec1内容为3,3,3,4
vector<int>::iterator it1 = vec2.begin();
vec2.insert(it1, 1); //vec2内容变为1,3,3,3
it1 = vec2.begin();
vec2.insert(it1, 2, 5);//vec2内容变为5,5,1,3,3,3,第一个参数:插入起始位置,第二个参数:插入个数,第三个参数:插入的值
it1 = vec3.begin();
vec3.insert(it1+1, vec2.begin(), vec2.end());//vec3内容变为1,5,5,1,3,3,3,2,3,后两个参数为另一迭代器的起始、结束位置
vec2.assign(6, 6); //vec2内容变为6,6,6,6,6,6,vec2中加入6个6,同时清除掉以前的元素。
//vector遍历方法:
//下标运算符访问
for (int i = 0; i < vec3.size(); i++) {
cout << vec3[i];
}
cout << endl;
//迭代器访问
for (vector<int>::iterator it = vec3.begin(); it != vec3.end(); it++) {
cout << *it;
}
cout << endl;
//vector删除、清除方法:pop_back、erase、clear
vec3.pop_back(); //删除最后一个元素
vec3.erase(vec3.begin() + 3); //删除第四个元素
vec3.erase(vec3.begin(), vec3.begin() + 2); //删除第一个和第二个元素
vec2.clear(); //清除所有元素
//vector其它使用方法见:http://www.cplusplus.com/reference/vector/
return 0;
}