前言
最近在准备复试,博主的复试是C/C++,考虑到C++自带的STL操作的方便性,所以选择了用C++作为机试的语言,预计会做成一个系列,内容包括但不限于:
- STL:set、map、序列容器(vector、deque、list、array)、string类、容器适配器(stack、queue、priority_queue)
- 常用的数据结构:链表、数组、栈、队列、树、图等常用的数据结构,部分会在前面的STL中涉及,就不在这重复了。
- 常用算法:一是
#incldue<alorithm>
中包含的常用算法;二是关于贪心、动态规划等等。 - 排序和搜索:会写一些比较常见或者重要的排序冒泡、选择、快排,线性搜索、二分搜索。因为排序在算法中直接使用
sort()
即可,所以不会涉及太多,应对复试应该没问题。
本系列会按照是什么、为什么、常用的操作这三块来行文,希望大家看完可以提出宝贵的意见。
关于本文
第一篇主要介绍的是STL中的set、map、序列容器。
1 set
1.1 是什么
从现在开始我们将介绍set (集合)的使用。集合是一个简单直观的数学概念,即具有共同特征的事物的集合。除了没有单独的键,set 容器和 map 容器很相似。定义 set 的模板有 4 种,其中两种默认使用 less 来对元素排序,另外两种使用哈希值来保存元素。有序 set 的模板定义在 set 头文件中。既然是为了实战准备那么我就只介绍平时用的比较多的一种。
1.2 为什么
在机试中常用的是set<T>
这种,容器保存 T 类型的对象,而且保存的对象是唯一的,其中保存的元素是有序的,标粗的字体就是使用它的理由,在去除字符串、整数中重复的元素时,可以采取直接插入到set里面,在插入的过程中就会自动去掉重复的元素,并且输出的原有元素是按照从小到大拍好的(字符串按照asc||码表排序的)。
1.3 常用的操作
1.3.1 初始化
在使用时需要加上头文件#include<set>//注意,STL头文件没有扩展名.h
,代码示例如下:
#include<iostream>
#include<set>
using namespace std;
int main()
{
set<int>s;
return 0;
}
可对int
进行修改,char
、string
都可以,在初始化结束后就可以利用s
进行操作了。
1.3.2 插入、遍历等常用操作
插入
#include <iostream>
#include <set>
using namespace std;
int main()
{
int a[] = {1,2,3};
set<int> s;
set<int>::iterator iter;
s.insert(a,a+3);
for(iter = s.begin() ; iter != s.end() ; ++iter)
{
cout<<*iter<<" &