本 Wiki 开启了 HTTPS。但由于同 IP 的 Blog 也开启了 HTTPS,因此本站必须要支持 SNI 的浏览器才能浏览。为了兼容一部分浏览器,本站保留了 HTTP 作为兼容。如果您的浏览器支持 SNI,请尽量通过 HTTPS 访问本站,谢谢!
这里会显示出您选择的修订版和当前版本之间的差别。
两侧同时换到之前的修订记录前一修订版后一修订版 | 前一修订版 | ||
cs:programming:cpp:courses:cpp_basic_deep:chpt_3 [2024/04/18 03:31] – [多维数组的遍历] codinghare | cs:programming:cpp:courses:cpp_basic_deep:chpt_3 [2024/08/11 04:26] (当前版本) – [指向数组开头和结尾的指针] codinghare | ||
---|---|---|---|
行 201: | 行 201: | ||
// | // | ||
extern int array[]; | extern int array[]; | ||
- | std::begin(b); std::end(b); | + | std::begin(array); std::end(array); |
</ | </ | ||
对于 incomplete type 的获取,如需使用 | 对于 incomplete type 的获取,如需使用 | ||
行 208: | 行 208: | ||
//ok | //ok | ||
extern int array[4]; | extern int array[4]; | ||
- | std::begin(b); std::end(b); | + | std::begin(array); std::end(array); |
</ | </ | ||
<WRAP center round box 100%> | <WRAP center round box 100%> | ||
行 382: | 行 382: | ||
A z2[3]; //等价与 int z2[4][3]; | A z2[3]; //等价与 int z2[4][3]; | ||
</ | </ | ||
+ | ====Vector==== | ||
+ | * 标准库提供的序列容器(类模板) | ||
+ | * 可复制,可动态更改个数 | ||
+ | <code cpp> | ||
+ | // | ||
+ | #include < | ||
+ | //类型是 vector< | ||
+ | std:: | ||
+ | //可复制 | ||
+ | std:: | ||
+ | y = x; | ||
+ | </ | ||
+ | ===Vector 的初始化=== | ||
+ | * 默认初始化为 0 个元素 | ||
+ | * 支持各种初始化 | ||
+ | <code cpp> | ||
+ | // | ||
+ | //使用 brace | ||
+ | std:: | ||
+ | //init with default element count | ||
+ | // | ||
+ | //y 是 3个元素的 vector,每个元素都被默认初始化为 0 | ||
+ | std:: | ||
+ | //count + value | ||
+ | //z 中有 3 个元素 都是 1 | ||
+ | std:: | ||
+ | </ | ||
+ | ===Vector 的常用成员函数=== | ||
+ | <code cpp> | ||
+ | //计算 vector 的大小 | ||
+ | x.size(); | ||
+ | // 查看 vector 是否为空 | ||
+ | x.empty(); | ||
+ | // 添加元素(运行期) | ||
+ | x.push_back(4); | ||
+ | // 删除元素 | ||
+ | x.pop_back(); | ||
+ | // index 访问 | ||
+ | x[2]; // | ||
+ | x.at(2); // | ||
+ | |||
+ | //成员 begin & end,指向第一个元素和最后一个元素 | ||
+ | auto beg = x.begin(); | ||
+ | auto e = x.end(); | ||
+ | </ | ||
+ | ===Vector 的遍历=== | ||
+ | <code cpp> | ||
+ | // | ||
+ | //注意 begin / end 的结果不再是指针,是 iterator | ||
+ | auto vBeg = x.begin(); | ||
+ | auto vEnd = x.end(); | ||
+ | while(vBeg != vEnd) | ||
+ | { | ||
+ | std::cout << *vBeg << " "; | ||
+ | vBeg++; | ||
+ | } | ||
+ | //range for | ||
+ | for (auto elem : x) | ||
+ | { | ||
+ | | ||
+ | } | ||
+ | </ | ||
+ | ===迭代器=== | ||
+ | * std 容器中,通常使用迭代器模拟代替指针 | ||
+ | * 迭代器可以: | ||
+ | * 解引用 | ||
+ | * 下标访问会产生 *(x + index) 的行为 | ||
+ | * 可以移动,相减(必须指向同一个 vector) | ||
+ | ==Vector 的比较== | ||
+ | * 位数相同且元素相同,则相等 | ||
+ | * 如果一长一短,短 vector 与长 vector 对应位置内容相同,则长的较大 | ||
+ | * 否则按位比较,找到的第一组不相同元素中,较大元素所在的 vector 较大 | ||
+ | ===Vector 的其他细节=== | ||
+ | * 改变 vector 元素数量可能会导致迭代器失效 | ||
+ | * Vector 支持多维 | ||
+ | <code cpp> | ||
+ | //元素是 Int vector 的 vector | ||
+ | std:: | ||
+ | </ | ||
+ | * 支持取地址并调用运算符('' | ||
+ | <code cpp> | ||
+ | std:: | ||
+ | ptr-> | ||
+ | </ | ||
+ | * size() 返回的是 '' | ||
+ | ====std:: | ||
+ | * 特化自 '' | ||
+ | * 可复制,可改变字符串长度 | ||
+ | ===string 的使用方法=== | ||
+ | <code cpp> | ||
+ | // | ||
+ | #include < | ||
+ | //初始化 | ||
+ | std::string myStr = " | ||
+ | |||
+ | // | ||
+ | //结果是 ' | ||
+ | std::string myStr2(3, ' | ||
+ | // | ||
+ | std::string myStr3 = myStr; | ||
+ | std::string myStr4(myStr); | ||
+ | |||
+ | // | ||
+ | //比较 == > < | ||
+ | //赋值 | ||
+ | std::string newStr; | ||
+ | newStr = myStr; | ||
+ | //拼接 | ||
+ | newStr = myStr + myStr2; | ||
+ | newStr = myStr + " | ||
+ | //string + 的重载左边要求对象类型是 std:: | ||
+ | //error | ||
+ | newStr = " | ||
+ | //索引 | ||
+ | myStr[0]; | ||
+ | </ | ||
+ | ==转化 std::string 到 c-string== | ||
+ | <code cpp> | ||
+ | // | ||
+ | myStr.c_str(); | ||
+ | </ |