项目空间

学习笔记N-027

C++语法

更新
内容块
37
阅读
约 2 分钟
路径
学习笔记 / C++

1.

代码块C++
total += sum[r++];
//等价于:
total += sum[r];   // 使用 r 的当前值作为下标
r = r + 1;         // 然后 r 自增
而不是取下标为r++的sum的值

2.

代码块C++
INT_MAX == 21.47 亿
INT_MIN == -21.47 亿

3.using

语法:using 别名 = 原类型;

代码块C++
using ll = long long;
using ull = unsigned long long;


using pii = pair<int, int>;
using pll = pair<ll, ll>;
using pdd = pair<double, double>;


using vi = vector<int>;
using vll = vector<ll>;
using vpii = vector<pii>;

4.C++17 结构化绑定(Structured Binding)

在搜索算法中,在循环中需要对于队列中一个pair<int,int>进行判断,需要用到里面对应的两个值

代码块C++
auto [dist, u] = q.top();

等价于:

代码块C++
int dist = q.top().first;  // 取出pair的第一个元素(距离)
int u = q.top().second;    // 取出pair的第二个元素(顶点编号)

把q.top()返回的pair<int, int>直接拆成了两个独立的变量dist和u,变量的顺序和 pair 元素的顺序严格一一对应。

5.std::string

有定义vector<string> maze(n);

有输入for (auto &line : maze) cin >> line;

有调用maze[x][y];

不需要二维字符串数组,就可以记录"二维"字符串

对于maze,他的每一位都是一个类型为string的字符串,每一位的字符串都可以根据输入动态调整大小.

string支持像vector一样的成倍数的动态扩容机制,是一个动态数组容器,内部数据结构很像 vector<char>

eg:

代码块C++
string row = "##%#.";   // maze[1]
代码块Java
// 用下标访问,就像二维数组一样
char c = row[2];           // c = '%'
char first = row.front();  // '#'
char last = row.back();    // '.'

// 查找子串或字符的位置
size_t pos = row.find('%');        // pos = 2
size_t hash_pos = row.find('#');   // 第一个 '#' 的位置 0
size_t not_found = row.find('X');  // 返回 string::npos
代码块C++
row[2] = '?';                // 直接赋值,原 "%" 变成 "?"
// 现在 row = "##?#."
代码块SQL
// 在末尾追加
row.push_back('!');          // row = "##%#.!"
row += "??";                 // row = "##%#.!??"

// 在中间插入
row.insert(2, "++");         // 在下标 2 前插入 "++"
// row 从 "##%#." 变成 "##++%#."
代码块JSON
// 删除最后一个字符
row.pop_back();              // "##%#." → "##%#"

// 删除指定位置的字符
row.erase(2, 1);             // 从下标 2 开始删除 1 个字符
// "##%#." → "##.#" (注意 % 被删掉了)

// 清空整个字符串
row.clear();                 // row 变成 ""

当然,也有传统字符数组char maze[5][5];

引用文档

搜索

反向引用

搜索