学习笔记N-027
C++语法
- 更新
- 内容块
- 37
- 阅读
- 约 2 分钟
- 路径
- 学习笔记 / C++
1.
total += sum[r++];
//等价于:
total += sum[r]; // 使用 r 的当前值作为下标
r = r + 1; // 然后 r 自增
而不是取下标为r++的sum的值2.
INT_MAX == 21.47 亿
INT_MIN == -21.47 亿3.using
语法:using 别名 = 原类型;
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>进行判断,需要用到里面对应的两个值
auto [dist, u] = q.top();等价于:
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:
string row = "##%#."; // maze[1]// 用下标访问,就像二维数组一样
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::nposrow[2] = '?'; // 直接赋值,原 "%" 变成 "?"
// 现在 row = "##?#."// 在末尾追加
row.push_back('!'); // row = "##%#.!"
row += "??"; // row = "##%#.!??"
// 在中间插入
row.insert(2, "++"); // 在下标 2 前插入 "++"
// row 从 "##%#." 变成 "##++%#."// 删除最后一个字符
row.pop_back(); // "##%#." → "##%#"
// 删除指定位置的字符
row.erase(2, 1); // 从下标 2 开始删除 1 个字符
// "##%#." → "##.#" (注意 % 被删掉了)
// 清空整个字符串
row.clear(); // row 变成 ""当然,也有传统字符数组char maze[5][5];