0%

C++ 地图

C++ 代码基本结构

不包含类的 C++ 代码基本结构

1
2
3
4
5
6
7
#include <iostream>
using namespace std;

int main() {
cout << "Hello World!" << endl;
return 0;
}

包含类的 C++ 代码基本结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
using namespace std;

class A {
public:
A() {
cout << "A()" << endl;
}
~A() {
cout << "~A()" << endl;
}
};

int main() {
A a;
return 0;
}

头文件声明

1
2
3
4
5
6
7
8
9
10
#ifndef _A_H_ // 防止头文件被重复包含
#define _A_H_

class A {
public:
A();
~A();
};

#endif

头文件实现

1
2
3
4
5
6
7
8
9
#include "A.h"

A::A() {
cout << "A()" << endl;
}

A::~A() {
cout << "~A()" << endl;
}

引用头文件

1
2
3
4
5
6
#include "A.h"

int main() {
A a;
return 0;
}

STL

容器

vector

创建

1
2
3
4
5
vector<int> v1; // 空
vector<int> v2(10); // 10 个元素,值为 0
vector<int> v3(10, 1); // 10 个元素,值为 1
vector<int> v4(v3); // 拷贝 v3
vector<int> v5(v3.begin(), v3.begin() + 3); // 拷贝 v3 的前 3 个元素

获取容量

1
v.capacity();

获取实际大小

1
v.size();

访问元素

1
2
3
4
v[0];
v.at(0);
v.front();
v.back();

赋值

1
2
v.assign(10, 1); // 10 个元素,值为 1
v.assign(v2.begin(), v2.begin() + 3); // 拷贝 v2 的前 3 个元素

插入

1
2
3
v.insert(v.begin() + 1, 2); // 在第 1 个元素后插入 2
v.insert(v.begin() + 1, 3, 2); // 在第 1 个元素后插入 3 个 2
v.insert(v.begin() + 1, v2.begin(), v2.begin() + 3); // 在第 1 个元素后插入 v2 的前 3 个元素

删除

1
2
v.erase(v.begin() + 1); // 删除第 1 个元素
v.erase(v.begin() + 1, v.begin() + 3); // 删除第 1 个元素到第 3 个元素

尾部插入和删除

1
2
v.push_back(1);
v.pop_back();

获取迭代器

1
2
3
4
5
vector<int>::iterator it = v.begin(); // 迭代器遍历到达尾部时,it == v.end(),指向最后一个元素的下一个位置
vector<int>::const_iterator cit = v.cbegin(); // 常量迭代器,不可修改
vector<int>::reverse_iterator rit = v.rbegin(); // 反向迭代器,指向最后一个元素
vector<int>::const_reverse_iterator crit = v.crbegin(); // 常量反向迭代器,不可修改
// 这里的 :: 是作用域限定符,用于指定 vector<int> 的成员

遍历

1
2
3
for (vector<int>::iterator it = v.begin(); it != v.end(); ++it) {
cout << *it << endl;
}

array

创建

1
2
3
4
5
array<int, 10> a1; // 10 个元素,值为 0
array<int, 10> a2 = {1, 2, 3}; // 10 个元素,前 3 个元素为 1, 2, 3,后 7 个元素为 0
array<int, 10> a3 = {1, 2, 3, 4, 5}; // 10 个元素,前 5 个元素为 1, 2, 3, 4, 5,后 5 个元素为 0
array<int, 10> a4 = a3; // 拷贝 a3
array<int, 10> a5 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; // 10 个元素,前 10 个元素为 1, 2, 3, 4, 5, 6, 7, 8, 9, 10

获取容量

1
a.size();

访问元素

1
2
3
4
a[0];
a.at(0);
a.front();
a.back();

赋值

1
2
3
a.fill(1); // 所有元素赋值为 1
a = {1, 2, 3}; // 前 3 个元素赋值为 1, 2, 3,后 7 个元素赋值为 0
a = a3; // 拷贝 a3

交换

1
a.swap(a3);

遍历

1
2
3
for (array<int, 10>::iterator it = a.begin(); it != a.end(); ++it) {
cout << *it << endl;
}