【C++】vector的简单使用

【C++】vector的简单使用_第1张图片
最近在C++中频繁的使用到了vector,给我的第一感觉就是这个容器太强大了,简直就是一切皆可装,而且它的容量一般也不需要关心,编译器也会根据你的vector中所装元素的数量进行动态的分配容量,可以把它看作是一个加强版的数组;

1.vector定义

在需要使用到vector的工程中首先需要引入相关头文件
#include

定义初始化vector:

简单理解就是:< >中是表示装入vector的数据类型,然后是数组名;

vector<int> vec;//默认size=0,capacity=0
vector<int> vec(10);//初始化size=10,capacity=10,所有元素默认值为0
vector<int> vec(10666);//初始化size=10,capacity=10,所有元素默认值为666
vector<int> vec_2(vec);//定义一个和vec完全相同的vector
vector<vector<float>> vec;//vector中装入vector类型的元素
vector<Point> vec;
...

vector的大小(size)是指已经初始化的元素数量,容量(capacity)则是指当前最多能够装进去多少元素;


这里顺便提一下vector的容量分配的规则:

我在VS中实验的结果是:容量按照1.5倍的规则进行分配,在网上也有看到说这与系统等有关,有的则是按照两倍的原则进行分配,以下代码是我在VS中验证的结果:

    ...
	vector<int> vec(10);
	cout << "vec.size:    " << vec.size() << endl;
	cout << "vec.capacity:" << vec.capacity() << endl;
	cout << "------------------------"<< endl;
	vec.push_back(1);
	cout << "vec.size:    " << vec.size() << endl;
	cout << "vec.capacity:" << vec.capacity() << endl;
	...

运行结果:
【C++】vector的简单使用_第2张图片

2.访问元素

直接通过下标 i 访问vector内指定的元素:

利用vec[i]或vec.at(i)访问指定元素;例:

vector<int> vec(10,666);
cout << vec[1] << endl;
cout << vec.at(5) << endl;

使用迭代器 iterator 访问vector内元素的值:

vec.begin():得到vec的头指针;
vec.end():得到vec的尾指针(最后一个元素的下一个单元的指针);
例:

int main()
{
	vector<int> vec;
	for (int i = 0; i < 10; i++)//初始化
	{
		v.push_back(i);
	}
	vector<int>::iterator iter = vec.begin();
	while (iter != vec.end())
	{
	    cout << "Value of vec[" << j << "] = " << *iter << endl;
		iter++;
	}
	return 0;
}

运行结果:
【C++】vector的简单使用_第3张图片

注:这的begin()和end()是一对,返回的都是迭代器类型的指针;


返回vector中最后一个元素:

vector::back( ):返回的是vector最后一个元素;例:

cout << vec.back() << endl;

返回vector中第一个元素:

vector::front( ):返回的是vector第一个元素;例:

cout << vec.front() << endl;

注:这的front()和back()是一对,返回的是首末元素;


获取vector的容量和大小:

vector::size():函数显示vecytor的实际大小;例:

cout << vec.size() << endl;

vector::capacity():函数显示vecytor的容量;例:

cout << vec.capacity() << endl;

3.插入元素

在末尾插入元素:

vector::push_back(x):在vector的末尾插入一个元素x,如果有必要会自动扩充容量。

vector::push_back()

4.删除元素

删除最后一个元素:

vector::pop_back(),例:

vec.pop_back();

删除指定位置元素:

vector::erase(iterator),例:

vector<int>::iterator iter = vec.begin();
vec.erase(iter+5);//删除指定下标出元素
//不用迭代器
vec.erase(iter+5);

删除指定范围元素:
vector<int> temp(0);
temp.erase(temp.begin()+5,temp.begin()+10);//删除temp中指定范围的元素

清空vector中所有的元素:

vector::clear(),例:

vec.clear();

注:清空后容量capacity不变,size变为0,删除元素同理;

5.传参

函数中形参的定义:

void Init(vector &v);
例:

void Init(vector<int> &v)
{
	for (int i = 0; i < 10; i++)
	{
		v.push_back(i);
	}
}

函数调用时实参的传入:

Init(vec);
例:

int main()
{
    vector<int> vec;
    Init(vec);
	for (int j = 0; j < vec.size(); j++)
	{
		cout << "Value of vec[" << j << "] = " << vec[j] << endl;
	}
	return 0;
}

运行结果:
【C++】vector的简单使用_第4张图片
更多关于vector参数传递的方式参考博客:C++(笔记)容器(vector)作为函数参数如何传参


6.排序

6.1 普通的1纬数组排序

sort(a.begin(), a.end());

6.2按自定义结构体进行排序

struct Area//结构体定义
{
	int id;
	double area;
};

bool cmp_area(const struct Area &a, const struct Area &b)
{
	return a.area > b.area;//进行从大到小排序
	//return a.area < b.area;//进行从小到大排序
}

vector<struct Area> convex_area(contours.size());
sort(convex_area.begin(), convex_area.end(),cmp_area);//对convex_area按area大小进行排序

其他参考博客:
1.C++ 中vector的用法详解

2.C++ 中vector的使用方法

你可能感兴趣的:(C/C++,c++,stl)