顺序容器 — — vector

初始化&赋值:

1>不带参数:

vector<int> mvector;

2>带参数的构造函数初始化:

vector<int> mvector(10);//十个默认值0的元素

vector<int> mvector(10,1);//是个默认值1的元素

3>通过数组地址初始化

int a[5]={1,2,3,4,5};

vector<int> b(a,a+5);//通过数组a的地址初始化,注意地址时从0到5,左闭右开区间

4>通过同类型的vector初始化

vector<int> a(10,1);

vector<int> b(a);

5>通过insert初始化

//insert初始化方式将同类型的迭代器对应的始末区间(左闭右开区间)内的值插入到vector中

vector<int> a(10,1);

vector<int> b;

//将a[0]~a[2]插入到b中,b.size()由0变为3

b.insert(b.begin(),a.begin(),a.begin()+3);
int a[5]={1,2,3,4,5};

vector<int> b;

b.insert(b.begin(),a,a+5)
//从b开始位置插入6个6

b.insert(b.begin(),6,6);

6>通过copy函数赋值

vector<int> a(5,1);

int tmp[5]={1,2,3,4,5};

vector<int> b(10,1);

copy(a.begin(),a.end(),b.begin());

copy(a1,a1+5,b.begin());


迭代器:

vector<int>::iterator it;

for(it=mvector.begin();it!=mvector.end())

    cout<<*it<<endl;



mvector.push_back(1);    把1压入容器末尾

mvector.insert(mvector.begin()+i,a);    在第i个元素后插入元素a

mvector.erase(mvector.begin()+i);    删除第i+1个元素

mvector.erase(mvector.begin()+i,mvector.begin()+j);    删除下标在[i,j-1]内的元素

mvector.size()    返回大小

mvector.clear()    清空容器


mvector.reverse(mvector.begin(),mvector.end());    元素反转,逆序排列

sort(mvector.begin(),mvector.end());    升序排列

自定义排序方式:

bool Comp(const int &a,const int &b){

    return a>b;

}

sort(mvector.begin(),mvector.end(),Comp);


List与Vector的区别

vector 与数组类似,它有一段连续的内存空间,并且起始地址不变,,因此它能非常好的支持随机存储,即使用下标操作符访问其中的元素,但由于它的内存空间是连续的,所以在中间进行插入和删除会造成内存块的拷贝(复杂度是O(n)),另外当该数组后的内存空间不够时,需要重新申请一块最勾搭的内存并进行内存的拷贝。这些都大大影响了vector的效率。它的迭代器支持“+”“+=”“<“等操作符

List是由数据结构中的双向列表实现的,因此它的内存空间是不连续的。只能通过指针来进行数据的访问,这个特点使得它的随机存取变得非常没有效率,需要遍历中间的元素,搜索复杂度O(N)因此它没有提供[]操作符的重载,但却可以以很好的效率支持任意地方的插入和删除。它的迭代器不支持“+”“+=”“<“等操作符,只能使用++来移动迭代器

猜你喜欢

转载自blog.csdn.net/vestlee/article/details/80525139