C++系列: 顺序容器(7)

1. 容器概述

容器名称性质
vector可变大小数组,支持快速随机访问,在尾部之外插入或删除元素可能很慢
deque双端队列,快速随机访问,头尾插入、删除很快
list双向链表,只支持双向顺序访问,list任何位置插入,删除很快
forward_list单向链表
array固定大小数组
string与vector相似,专门保存字符

容器操作:

类型别名含义
iterator迭代器
const_iterator读取元素(不能修改元素)
构造函数含义
C c默认构造函数
大小含义
c.size()c中元素的数目
c.max_size()可保存的最大元素数目
c.empty()判断是否存储了元素
获取迭代器含义
c.begin() ,c.end()返回指向c首尾元素的迭代器
c.cbegin(),c,cend()返回const_iterator

不是容器,添加,删除 接口不同。

添加、删除元素含义
c.insert()插入
c.emplace()构造一个元素
c.erase()删除指定元素
c.clear()删除c种所有元素

2. 容器示例

使用迭代器访问容器。

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

int main(){
	vector<const char*> articles = {"a", "an", "the"};
	auto it1 = articles.cbegin();
	for(it1;it1 != articles.cend(); ++it1){
		cout << *it1 << endl;
	}
} 

结果:

a
an
the

容器初始化:

#include <iostream>
#include <vector>
#include <list>
#include <forward_list> 
#include <deque>
#include <array>
using namespace std;

void print_container(auto con){
	auto it = con.begin();
	for(it; it != con.end(); it++){
		cout << *it << " ";
	}	
	cout << endl;
}
int main(){
	list<string> authors = {"Milton", "Shakespeare", "Austen"};
	list<string> copy_authors(authors);
	vector<const char*> articles = {"a", "an", "the"};
	// const char* 元素可转换为string 
	forward_list<string> words(articles.begin(),articles.end());	
	deque<string> auth_list(authors.begin(),authors.end());
	array<int, 5> iarr;
	array<int, 5> iarr2 = {1,2,3,4,5};
	array<int, 5> arr2_copy = iarr2;
	// 内置的数组不支持拷贝赋值 
	int dig[5] = {1,2,3,4,5};
	int dig_copy[5];
	for(int i=0; i<5;i++){
		dig_copy[i] = dig[i];
	} 
	cout << "copy_authors:" << endl; 
	print_container(copy_authors);
	cout << "words:" << endl; 
	print_container(words);
	cout << "arr2_copy:" << endl; 
	print_container(arr2_copy);
	cout << "auth_list:" << endl; 
	print_container(auth_list);
} 

结果:

copy_authors:
Milton Shakespeare Austen
words:
a an the
arr2_copy:
1 2 3 4 5
auth_list:
Milton Shakespeare Austen

3. 容器方法

容器赋值运算

运算含义
swap(c1,c2)交换c1 和 c2中的元素
seq.assign(b,e)将迭代器b 和 e 范围内的元素赋值给 seq

assign 不适合关联容器和 array。

容器添加/删除元素

操作含义
c.push_back(t)尾部创建值为t的元素
c.push_front(t)头部创建值为t的元素
c.pop_back(t)尾部删除值为t的元素
c.pop_front(t)头部删除值为t的元素

改变容器大小

操作含义
c.resize(n)调整c的大小为n个元素
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 酷酷鲨 设计师:CSDN官方博客 返回首页