C++ STL 复习

戏子无情 提交于 2020-02-07 20:46:24

1. Vector

1.1 基本函数
1.1.1 构造函数
  • vector():创建一个空vector
  • vector(int nSize):创建一个vector,元素个数为nSize
  • vector(int nSize,const t& t):创建一个vector,元素个数为nSize,且值均为t
  • vector(const vector&):复制构造函数
  • vector(begin,end):复制[begin,end)区间内另一个数组的元素到vector中
1.1.2 插入函数
  • void push_back(const T& x):向量尾部增加一个元素X
  • iterator insert(iterator it,const T& x):向量中迭代器指向元素前增加一个元素x
  • iterator insert(iterator it,int n,const T& x):向量中迭代器指向元素前增加n个相同的元素x
  • iterator insert(iterator it,const_iterator first,const_iterator last):向量中迭代器指向元素前插入另一个相同类型向量的[first,last)间的数据
1.1.3 删除函数
  • iterator erase(iterator it):删除向量中迭代器指向元素
  • iterator erase(iterator first,iterator last):删除向量中[first,last)中元素
  • void pop_back():删除向量中最后一个元素
  • void clear():清空向量中所有元素
1.1.4 遍历函数
  • reference at(int pos):返回pos位置元素的引用
  • reference front():返回首元素的引用
  • reference back():返回尾元素的引用
  • iterator begin():返回向量头指针,指向第一个元素
  • iterator end():返回向量尾指针,指向向量最后一个元素的下一个位置
  • reverse_iterator rbegin():反向迭代器,指向最后一个元素
  • reverse_iterator rend():反向迭代器,指向第一个元素之前的位置
1.1.5 判断函数
  • bool empty() const:判断向量是否为空,若为空,则向量中无元素
1.1.6 大小函数
  • int size() const:返回向量中元素的个数
  • int capacity() const:返回当前向量张红所能容纳的最大元素值
  • int max_size() const:返回最大可允许的vector元素数量值
1.1.7 其他函数
  • void swap(vector&):交换两个同类型向量的数据
  • void assign(int n,const T& x):设置向量中第n个元素的值为x
  • void assign(const_iterator first,const_iterator last):向量中[first,last)中元素设置成当前向量元素
1.2 基本用法
#include <vector>
using namespace std;
1.2.1 创建数组:
vector<type> obj;
vector<type> obj(MaxNum);
vector<type> obj(MaxNum, init_value);
vector<vector<type> > obj; // 二维数组, 最外的 <> 有一个空格
1.2.2 在容器结尾输入&移除数据
obj.push_back(elem); // 插入
obj.pop_back(); // 移除
1.2.3 清除容器中所有数据
obj.clear();
1.2.4 实例:
#include <iostream>
#include <vector>
using namespace std;

int main()
{
	vector<int> obj; // 创建vector对象
	int i, j;
    // 输入数据
	for(i = 0; i < 10; i ++)
	{
		obj.push_back(i);
		cout << obj[i] << ",";
	}
	// 移除末尾数据
	for(i = 0; i < 5; i ++)
		obj.pop_back();
	cout << endl;
    // 输出
	for(i = 0; i < obj.size(); i ++)
		cout << obj[i] << ",";
    cout << endl;
	// 清除
    obj.clear();
	if(obj.size() == NULL)
		cout << "NULL" << endl;
	else
		cout << obj.size() << endl;
	return 0;
}
/*
输出结果:
0,1,2,3,4,5,6,7,8,9,
0,1,2,3,4,
NULL
*/
1.2.5 排序: 利用algorithm库的sort函数
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main()
{
    vector<int> obj;
    obj.push_back(1);
    obj.push_back(3);
    obj.push_back(0);
    
    // 升序排序
    sort(obj.begin(), obj.end());
    
    cout << "min to max:";
    for(int i = 0; i < obj.size(); i ++)
        cout << obj[i] << ",";
    cout << endl;
    
    cout << "max to min:";
    // reverse翻转
    reverse(obj.begin(), obj.end());
    for(int i = 0; i < obj.size(); i ++)
        cout << obj[i] << ",";
    return 0;
}
/*
输出结果:
min to max:0,1,3,
max to min:3,1,0,
*/

给sort传入参数实现降序排序:

bool compare(int a, int b)
{
    return a < b; // 升序排列
    // return a > b; // 降序排列
}
int a[5] = {2, 4, 1, 3, 5};
sort(a, a + 20, compare);
for(int i = 0; i < 5; i ++)
	cout << a[i] << ",";
/*
输出结果:
1,2,3,4,5
*/
1.2.6 访问**(直接数组访问&迭代器访问)**
// 数组访问
for(int i = 0; i < obj.size(); i ++)
    cout << obj[i] << " ";
// 迭代器访问
// 声明一个迭代器来访问vector容器 -> 遍历或者指向vector容器的元素
vector<int>::iterator it;
for(it = obj.begin(); it != obj.end(); it ++)
    cout << *it << " ";
1.2.7 创建二维数组
  • 方法一
int N = 5, M = 6;
vector<vector<int> > obj(N); // 定义二维数组大小 N 行
for(int i = 0; i < obj.size(); i ++) // N 行 M 列, 值全为0
{
    obj[i].resize(M);
}
for(int i = 0; i < obj.size(); i ++)
{
    for(int j = 0; j < obj[i].size(); j ++)
        cout << obj[i][j] << " ";
    cout << endl;
}
  • 方法二
int N = 5, M = 6;
vector<vector<int> > obj(N, vector<int>(M)); // 定义二维数组 N 行 M 列
for(int i = 0; i < obj.size(); i ++)
{
    for(int j = 0; j < obj.size(); j ++)
        cout << obj[i][j] << " ";
    cout << endl;
}
/*
输出结果:
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
*/

2. Deque

Reference:

  1. C++(笔记)浅析vector容器的实例
  2. C++中STL用法超详细总结
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!