char

转大小写:

char ch = 'a';
ch = (char) toupper(ch);
ch = (char) tolower(ch);

下一个字符:

'b' == ('a' + 1);

int

最大值最小值:

int MAX = INT_MAX;
int MIN = INT_MIN;

array

创建数组:

int array [4];	// 如果不初始化则值随机
int array[] = {1,2,3,4};
int array[4] = {0};	// {0, 0, 0, 0}
// 注意只有0可以这样被初始化,其他的数是不行的
int array[4] = {1};	// {1, 0, 0, 0},只有第一个数被初始化为1,其他的还是默认值

引用:

array[3];

获取长度:

sizeof(array) / sizeof(array[0]);

排序:

#include <algorthm>
int a[] = {5, 4, 3, 2, 1};
int n = sizeof(a) / sizeof(a[0]);
// 升序
sort(a, a + n);
// 降序
bool compare(int a, int b)
{
    return a > b;	// 若改为a < b则为升序
}
sort(a, a + n, compare);

string

创建字符串:

string s = "cpp";

引用

s[0]	// s[0] = 'c'

字符串相等:

string s1 = "abc";
string s2 = "abc";
s1.compare(s2);
// 若s1小于s2返回-1
// 若相等返回0
// 若s1大于s2返回1

字符串长度:

int n = s.size();

字符串连接:

s1.append(s2);

截取字符串:

string s = "abc";
string sub = s.substr(0, 1);	// str = "a";

字符的位置:

string s = "abc";
s.find('a');	// 从前向后查找第一个出现的'a'的位置
s.rfind('a');	// 从后往前查找第一个出现的'a'的位置
s.find_first_of("abc");	// 从前往后查找第一次出现在"abc"中任意字符的位置
s.find_last_of();
s.find_first_not_of();
s.find_last_not_of();
// 如果没有查询到则返回:
string::npos

插入字符串:

string s1 = "abc";
s1.insert(1, "ddd");	// s1 = "adddbc"

字符串交换:

s1.swap(s2);

字符串替换:

string s = "a! b";
replace(s.begin(), s.end(), '!', ' ');	// str = "a  b";

删除字符串头尾的空格:

string trim(string s)
{
    if (s.empty())
    {
        return s;
    }
    s.erase(0, s.find_first_not_of(" "));
    s.erase(s.find_last_not_of(" ") + 1);
    return s;
}

字符串修改:

string s = "apple";
s[0] = 'b';

字符串删除:

string s = "apple";
s.erase(bit, num);	// bit表示开始的删除的位,num表示要删除的字符的个数

vector

定义vector:

// 一维
vector<int> vec;
vector<int> vec(3);	// 默认值为0

// 利用数组初始化
int arr[] = {1, 2, 3};
vector<int> vec(begin(arr), end(arr));

// 二维
vector<vector<int>> vec(m, vector<int>(n));	// 长为m,宽为n

排序:

sort(vec.begin(), vec.end());	// 升序
sort(vec.rbegin(), vec.end());	// 降序

取栈顶:

vec.back();

判断是否存在:

if (find(vec.begin(), vec.end(), key) != vec.end())
{
	// != 表示存在
}

删除元素:

vec.erase(vec.begin() + index);	// 删除第index个元素

判断是否为空:

vec.empty();

清空列表:

vec.clear();

反转:

vec.reverse(vec.begin(), vec.end());

二维排序:

vector<vector<int>> vec{{3, 4}, {1, 2}, {5, 6}};
// 按照第一列,升序排列
sort(vec.begin(), vec.end());

// 若不是,则需要写排序规则
bool compare(const vector<int> &a, const vector<int> &b)
{
	return a[1] < b[1];	// 按照第二列升序
}

pair

创建:

pair<int, int> p;
pair<int, int> p(p1, p2);
make_pair(p1, p2);

取值:

p1.first;	// 第一个元素
p1.second;	// 第二个元素

pair作为函数返回值:

std::pair<std::string, std::int> getPerson() {
    return std::make_pair("Kyxie", 1);
}
std::tie(p1, p2) = getPerson();

unordered_map

创建一个哈希映射:

#include <unordered_map>
unordered_map <int, int> map;

存储键值对(修改键值对):

map.insert(pair<int, int>(key, value));
map[key] = value;	// 这种更简单

获取 key 的内容:

map[key];

查询是否存在 key:

map.count(key);	// 如果存在,返回1,不存在则返回0
if ((auto iter = map.find(key)) != map.end());	// 存在则括号内为真
// iter的数据类型为 unordered_map<int, int>::iterator

if (map[key] == 0)	// 这种最简单 

遍历键值对:

for (auto i = map.begin(); i != map.end(); i++)
{
    // key: i->first
    // value: i->second
}

是否为空:

map.empty();

删除Key:

map.erase(key);

map的大小:

map.size();

unordered_set

遍历:

for (auto i = set.begin(); i != set.end(); i++) {
    cout << *i << endl;
}

queue

创建queue:

queue<int> q;

加入元素:

q.push(1);

删除队首元素:

q.pop();	// 这个没有返回值

队首元素:

q.front();

队列大小:

q.size();

是否为空:

q.empty();

互相转换

// int转string
int i;
string str = to_string(i);

// string转int
String str;
int i = stoi(str);

// char转int
char ch;
int i = ch - '0';

// int转char
int i;
char ch = i + '0';

// char[]转int
char s[] = "111";
int i = atoi(s);

// int转char[]
int i = 111;
char ch[100];
itoa(i, ch, 10);
// 第一个参数为待转化的整数
// 第二个参数为输出的字符串数组
// 第三个参数为进制,范围为2 - 36

// String转char[]
string str;
char *ch = (char *)str.data();

// char[]转String
char ch[] = "abcd";
string str(ch);

// char转String
char ch = 'a';
string str(1, ch);

// int[]转vector
int a[] = {1, 2, 3};
vector<int> vec(a, a + sizeof(a) / sizeof(int));

// vector转int[]
vector<int> vec{1, 2, 3};
int i[vec.size()];
memcpy(i, &vec[0], vec.size() * sizeof(vec[0]));