您的位置:首页 > 编程语言 > C语言/C++

C++STL之vector

2015-10-09 17:24 399 查看
vector容器可以像数组那样进行随机的访问,还可以在尾部进行插入元素,是一种简单高效的容器,完全可以替换掉数组。

vector具有内存自动管理的功能,对于元素的插入和删除,可以动态的整理所占用的内存空间。

vector容器的下标也是从0开始计数的。

vector容器的定义:

1. 可以事先固定大小,事后可以随时间调整大小。

2. 事先不定义,随时使用push.back()方法从尾部扩张元素

3. 使用insert()在某个元素位置前插入新元素。

vector容器有两个重要的方法:

1. begin() 返回的是首元素位置的迭代器

2. end() 返回的是最后一个元素的下一个元素位置的迭代器

* 创建vector对象

1. 不指定容器的元素个数

vector<int> v;


2. 指定元素个数

下标是0-9,并且每个元素默认初始值为0

vector<double> v(10);


3.指定元素个数,并且为每个元素赋初始值

vector<double> v(10, 8.6);


*下标方式访问vector元素,用迭代器访问vector元素

常使用迭代器配合循环语句来对vector对象进行遍历访问,迭代器的类型一定要与它要遍历的vector对象的元素类型一致
#include<iostream>
#include<vector>
using namespace std;

int main()
{
vector<int> v(3);

//通过下标访问
v[0] = 2;
v[1] = 7;
v[2] = 9;

vector<int>::iterator it;//定义迭代器变量
for(it = v.begin(); it != v.end(); it ++)
cout<<*it<<" ";
cout<<endl;
return 0;
}


*元素的插入

insert()方法可以在vector对象的任意位置前插入一个新的元素,同时,vector自动扩张一个元素空间 ,插入位置后的所有元素依次向后挪动一个位置,

insert()方法要求插入的位置,是元素的迭代器位置,而不是元素的下标。

#include<iostream>
#include<vector>
using namespace std;

int main()
{
vector<int> v(3);
v[0] = 2;
v[1] = 7;
v[2] = 9;

//在最前面插入新元素,新元素值为8
v.insert(v.begin(), 8);

//在第2个元素前插入新元素1,vector从0开始计数
v.insert(v.begin()+2, 1);

vector<int>::iterator it;
for(it = v.begin(); it != v.end(); it ++)
cout<<*it<<" ";
cout<<endl;
return 0;
}


*元素的删除

erase()方法可以删除vector中迭代器所指的一个元素或一段区间中的所有元素。

clear()方法则一次性删除vector中的所有元素

#include<iostream>
#include<vector>
using namespace std;

int main()
{
vector<int> v(10);
for(int i = 0; i < 10; i ++)
v[i] = i;

//删除第2个元素,从0开始计数
v.erase(v.begin()+2);

vector<int>::iterator it;
for(it = v.begin(); it != v.end(); it ++)
cout<<*it<<" ";
cout<<endl;

//删除迭代器第1个到第5个区间的所有元素
v.erase(v.begin()+1, v.begin()+5);

for(it = v.begin(); it != v.end(); it ++)
cout<<*it<<" ";
cout<<endl;

//清空向量
v.clear();
cout<<v.size()<<endl;
return 0;
}


*使用reverse()反向排列算法

reverse()反向排列算法,需要头文件#include<algorithm>

reverse()算法可将向量中某段迭代器区间元素反向排列

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;

int main()
{
vector<int> v(10);

for(int i = 0; i < 10; i ++)
v[i] = i;

//反向排列向量从头到尾的元素
reverse(v.begin(), v.end());

vector<int>::iterator it;
for(it = v.begin(); it != v.end(); it ++)
cout<<*it<<" ";
cout<<endl;

//反向排列向量前5个元素
reverse(v.begin(), v.begin()+5);
for(it = v.begin(); it != v.end(); it ++)
cout<<*it<<" ";
cout<<endl;
return 0;
}


*使用sort()算法对向量元素进行排序

使用sort()算法,需要申明#include<algorithm>

sort算法要求使用随机访问迭代器进行排序,在默认情况下,对向量元素进行升序排列。

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;

int main()
{
vector<int> v;

for(int i = 0; i < 10; i ++)
v.push_back(9-i);

//输出排序前
for(int i = 0; i < 10; i ++)
cout<<v[i]<<" ";
cout<<endl;

//排序 升序排序
sort(v.begin(), v.end());
for(int i = 0; i < 10; i ++)
cout<<v[i]<<" ";
cout<<endl;
return 0;
}


还可以自己设计排序比较函数,然后,吧这个函数指定给sort算法,sort就根据这个比较函数指定的排序规则进行排序,设计一个排序比较函数cmp

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;

//自行设计排序比较函数:对元素进行降序排列
bool cmp(const int &a, const int &b)
{
if(a != b)
return a > b;
else
return a > b;
}

int main()
{
vector<int> v;

for(int i = 0; i < 10; i ++)
v.push_back(i);

//输出排序前
for(int i = 0; i < 10; i ++)
cout<<v[i]<<" ";
cout<<endl;

//排序 升序排序
sort(v.begin(), v.end(), cmp);
for(int i = 0; i < 10; i ++)
cout<<v[i]<<" ";
cout<<endl;
return 0;
}


*向量的大小

使用size()方法可以返回向量的大小,即向量元素的个数

使用empty()方法返回向量是否为空。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: