C++ vector容器及其操作总结

STL初识

C++的面向对象和泛型编程思想,目的就是提高代码复用性。STL(Standard Template Library)标准模板库,从广义上分为:容器(container)、算法(algorithm)、迭代器(iterater),容器即为数据结构,本篇着重介绍C++中定义好的常用的容器,包括vector、string、list、deque、set、map。学会这些容器的使用,再学数据结构与算法,利用已有的容器去实现自定义的数据结构将事半功倍,看算法也将如鱼得水。

vector

vector的定义

首先,你要用C++中定义好的数据结构容器需要包含其头文件,此处要用到vector容器,先包含其头文件:

#include <vector>

创建vector容器结构体(类)对象:

vector<储存的数据类型> 容器结构体(类)对象名称

例如:

vector<int> v;

储存的数据类型可以为自定义数据类型,也可以定义vector数组

vector常用的成员函数
size()//返回容器中元素个数
begin()//返回头部迭代器
end()//返回尾部+迭代器
rbegin()//返回逆首部迭代器
rend()//返回逆尾部-迭代器
front()//返回首元素值
back()//返回尾部元素值
push_back()//在末尾插入一个元素
pop_back()//弹出最后一个元素
swap()//交换连个容器
insert()//在指定位置插入元素
erase()//在指定位置删除元素
empty()//判断容器是否为空
clear()//清空容器
常用成员函数参数讲解
push_back(x);

x为插入元素的值

swap(v2);

实现调用容器和v2容器中元素的互换

insert(position,x);
insert(position,n,x);
insert(position,first,last);

第一个为在迭代器position位置前插入值为x的元素,第二个为在迭代器position位置前插入n个值为x的元素,第三个为在迭代器position位置前插入另一个容器first到last的一段(复杂度高,不建议使用,因此不详细解释,想了解可以查一下)

erase(position);
erase(first,last);

第一个为删除迭代器position位置的元素,第二个为删除一段序列(同样复杂度高,不建议使用)

示例代码
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
void print(int val) 
{
	cout << val <<" ";
}
void test() {
	vector<int> v1;
	vector<int> v2;
	v2.push_back(15);
	v2.push_back(1);
	v2.push_back(5);
	for (int i = 0; i < 10; i++) {
		v1.push_back(i);
	}
	cout << v1.front() << " " << v1.back() << endl;
	cout << v1.size() << endl;
	v1.pop_back();
	vector<int>::iterator it = v1.begin();
	for (; it != v1.end(); it++) {
		cout << *it << " ";
	}
	cout << endl;
	v1.insert(it, 2);
	for (int i = 0; i < v1.size(); i++) {
		cout << v1[i] << " ";
	}
	cout << endl;
	v1.erase(v1.begin());
	for (int i = 0; i < v1.size(); i++) {
		cout << v1.at(i) << " ";
	}
	cout << endl;
	v1.swap(v2);
	for_each(v1.begin(), v1.end(), print);
	cout << endl;
	v1.clear();
	cout << v1.empty() << endl;
}
int main() {
	test();
	system("pause");
	return 0;
}

运行结果图

vector容器的遍历

迭代器遍历

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

[]遍历

for(int i = 0;i < v.size();i++){
cout<<v[i]<<" ";
}
利用成员函数at遍历
```c++
for(int i = 0;i < v.size();i++){
cout<<v。at(i)<<" ";
}
利用内置函数for_each,需要包含头文件algorithm
```c++
#include <algorithm>
void print(int val){
cout<<val<<" ";
}
for_each(v.begin(),v.end(),print);

for_each利用的回调,这里不细讲,本人也尚未学懂,有兴趣可以查查;
遍历方法还有,掌握以上几种基本够用,初步只掌握迭代器遍历和[]遍历即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值