0%

小课堂03-利用好C++特性

C++在竞赛上用的很多,它运行效率很高,并且不乏一些实用的标准库,这一章就来讲讲C++中竞赛常用的“特性”。

STL

由于这方面内容很多,只列出部分常用的内容。

vector

向量,可将其简单理解为动态数组,元素按顺序存储于其中。向量用的比较多,故详细讲解,其它容器的常用成员方法也大都和向量类似。用法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <vector>     // 头文件
using namespace std; // 命名空间不能忘

int main(){
// 构造
vector<int> v1; // 创建一个空向量v1,尖括号内的类型指定了元素的类型,可以是普通类型、struct、class甚至其他容器
vector<int> v2(10); // 创建一个元素个数为10的向量v2
vector<int> v3(10,0); // 创造一个元素个数为10,值均为0的向量v3

// 修改
v1.push_back(10); // 将元素10添加到容器末尾
v3.pop_back(); // 移除末元素
v2[2]; // 访问v2中下标为2的元素
v1.clear(); // 清空v1

// 查询
v1.empty(); // 判断是否为空
v2.size(); // 返回v2容纳的元素数

// 迭代器(姑且理解为指针)
v1.begin(); // 返回指向容器第一个元素的迭代器,类型为vector<int>::iterator
v1.end(); // 返回指向容器尾端的迭代器

return 0;
}

set

集合,需要 #include <set>无序存储无重复元素,并且没有 push_back()方法,使用 insert() 来添加元素。

stack

,需要 #include <stack> ,使用 top() 来获取栈顶元素,push() 入栈, pop() 出栈。

queue

队列,需要 #include <queue> ,使用 front()back() 来获取队首、队尾元素,push_back()pop_front() 实现入队、出队。

map/unsorted_map

Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候,在编程上提供快速通道。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <map>  
#include <string>
#include <iostream>
using namespace std;

int main(){

map<int, string> mapStudent; // 从int到string的映射,前面的成为key,后面的称为value
mapStudent.insert(pair<int, string>(1, "student_one")); //使用insert插入,若key重复,则不插入数据,还要留意pair的用法
mapStudent.insert(pair<int, string>(2, "student_two"));
mapStudent[3]="student_three"; // 用数组方法插入,若key重复,仍执行插入

cout<<mapStudent[4]<<endl; // 即便key 4并未赋值,其默认值为""(因为string的默认值是"")

map<int, string>::iterator iter;

for(iter = mapStudent.begin(); iter != mapStudent.end(); iter++)
cout<<iter->first<<' '<<iter->second<<endl; // 注意使用fisrt和second来访问key和value


return 0;
}

sort()

引用

题目