c++常用知识点
1.for遍历string或char[ ]
//方法一
string s;
for(char x:s);
//方法二
char s[8];
for(char x:s);//==for(int i=0;i<8;i++)
2.c++的迭代器
c++的迭代器类似c的指针,可用*(星号)来访问其存储的值
指针用于连续存储空间,迭代器用于用于非连续存储空间
在c++的begin()和end()等函数的返回值是迭代器(begin()和end()用于指向string类型的的首元素的迭代器和尾元素的下一个位置的迭代器)
3.auto关键字
auto可以在声明变量的时候根据变量初始值的类型自动为此变量选择匹配的类型
auto声明的变量必须要初始化,否则编译器不能判断变量的类型;不能被声明为返回值;不能作为形参;不能被修饰为模板参数
int a = 10;
auto au_a = a;//自动类型推断,au_a为int类型
4.vector向量/容器
参考大佬博客
vector是一种对象实体, 能够容纳许多其他类型相同的元素,能够根据需要随时自动调整自身的大小以便容下所要放入的元素,广义上认为是数组的增强版,在头文件#include<vector>中。
(1)vector的声明和初始化
vector<int> a ; //声明一个int型向量a
vector<int> a(10) ; //声明一个初始大小为10的向量
vector<int> a(10, 1) ; //声明一个初始大小为10且初始值都为1的向量
vector<int> b(a) ; //声明并用向量a初始化向量b
vector<int> b(a.begin(), a.begin()+3) ; //将a向量中从第0个到第2个(共3个)作为向量b的初始值
(2)vector的输入与输出
元素的输入和访问可以像操作普通的数组那样, 用cin>>a[i]进行输入, cout<<a[i]这样进行输出
(3)vector的基本操作
1>. a.size() //获取向量中的元素个数
2>. a.empty() //判断向量是否为空
3>. a.clear() //清空向量中的元素
4>. 复制
a = b ; //将b向量复制到a向量中
5>. 比较
保持 ==、!=、>、>=、<、<= 的惯有含义 ;
如: a == b ; //a向量与b向量比较, 相等则返回1
6>. 插入 - insert
①、 a.insert(a.begin(), 1000); //将1000插入到向量a的起始位置前
②、 a.insert(a.begin(), 3, 1000) ; //将1000分别插入到向量元素位置的0-2处(共3个元素)
③、 vector<int> a(5, 1) ;
vector<int> b(10) ;
b.insert(b.begin(), a.begin(), a.end()) ; //将a.begin(), a.end()之间的全部元素插入到b.begin()前
7>. 删除 - erase
①、 b.erase(b.begin()) ; //将起始位置的元素删除
②、 b.erase(b.begin(), b.begin()+3) ; //将(b.begin(), b.begin()+3)之间的元素删除
8>. 交换 - swap
b.swap(a) ; //a向量与b向量进行交换
5.sort函数
sort函数在头文件#include<iostream>和#include<algorithm>中。
sort(begin, end, cmp),其中begin为指向待sort()的数组的第一个元素的指针,end为指向待sort()的数组的最后一个元素的下一个位置的指针,cmp参数为排序准则,如果没有的话,默认以升序排序。
(1)默认升序
int a[5] = {1, 3, 4, 2, 5};
sort(a, a + 5);//排序结果1 2 3 4 5
(2)自定义cmp参数
bool cmp(int x, int y)
{return x > y;}
int a[5] = {1, 3, 4, 2, 5};
sort(a, a + 5, cmp);//排序结果5 4 3 2 1