What & How & Why

差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

两侧同时换到之前的修订记录前一修订版
上一修订版两侧同时换到之后的修订记录
cs:programming:cpp:cpp_primer:3_str_vec_arry [2024/01/14 13:46] – ↷ 页面programming:cpp:cpp_primer:3_str_vec_arry被移动至cs:programming:cpp:cpp_primer:3_str_vec_arry codingharecs:programming:cpp:cpp_primer:3_str_vec_arry [2024/01/15 00:33] – ↷ 链接因页面移动而自动修正 50.16.62.182
行 47: 行 47:
 </code> </code>
 ===Operations on strings=== ===Operations on strings===
-{{ :programming:cpp:cpp_primer:string_operations.jpg |}}+{{ cs:programming:cpp:cpp_primer:string_operations.jpg |}}
 ==string的读 / 写== ==string的读 / 写==
 string 的读入操作有两种常用的方式:''>>'' 运算符和 ''getline'' 函数。\\  string 的读入操作有两种常用的方式:''>>'' 运算符和 ''getline'' 函数。\\ 
行 127: 行 127:
 ===string中的字符操作=== ===string中的字符操作===
 C++ 通过头文件 ''cctype'' 中定义的下列函数来对单个字符进行操作: C++ 通过头文件 ''cctype'' 中定义的下列函数来对单个字符进行操作:
-{{ :programming:cpp:cpp_primer:cctype.jpg |}}+{{ cs:programming:cpp:cpp_primer:cctype.jpg |}}
 <WRAP center round tip 100%> <WRAP center round tip 100%>
 在对 string 中的字符操作过程中,C++ 继承了 C 的字符操作库 ctype.h。不过在 C++ 中,有属于 C++ 自己的版本来表达这个库,那就是去掉扩展名(.h suffix), 然后在原有的库名前加一个 c (c 开头表示这个 header 来源于 c 标准库的一部分),这样 ''ctype.h'' 就变成了 ''cctype''。书上推荐这么写的原因是:这样可以让程序员更好的辨别哪些 header 继承于 C,而哪些 header 是 C++ 特有的。 在对 string 中的字符操作过程中,C++ 继承了 C 的字符操作库 ctype.h。不过在 C++ 中,有属于 C++ 自己的版本来表达这个库,那就是去掉扩展名(.h suffix), 然后在原有的库名前加一个 c (c 开头表示这个 header 来源于 c 标准库的一部分),这样 ''ctype.h'' 就变成了 ''cctype''。书上推荐这么写的原因是:这样可以让程序员更好的辨别哪些 header 继承于 C,而哪些 header 是 C++ 特有的。
行 277: 行 277:
 除开 ''push_back()'',C++ 还为 vector 提供了一些常用的操作: 除开 ''push_back()'',C++ 还为 vector 提供了一些常用的操作:
 \\ \\  \\ \\ 
-{{ :programming:cpp:cpp_primer:vector_op.jpg |}}+{{ cs:programming:cpp:cpp_primer:vector_op.jpg |}}
 \\ \\  \\ \\ 
 值得提醒的是,''size()'' 函数的返回值也是 ''size_type''。如果需要定义该类型数据的 vector,必须指定该类型数据对应的类型: 值得提醒的是,''size()'' 函数的返回值也是 ''size_type''。如果需要定义该类型数据的 vector,必须指定该类型数据对应的类型:
行 333: 行 333:
 ===迭代器的操作=== ===迭代器的操作===
 迭代器支持一系列的操作:\\ \\  迭代器支持一系列的操作:\\ \\ 
-{{:programming:cpp:cpp_primer:iterator_op.png|}}+{{cs:programming:cpp:cpp_primer:iterator_op.png|}}
 \\ \\ \\ \\
 利用迭代器性质判断容器是否为空: 利用迭代器性质判断容器是否为空:
行 405: 行 405:
 需要注意的是 vector 有导致迭代器无效的潜在危险。比如像已经确定范围的 vector 遍历过程中再对该 vector 添加新的元素,那么迭代器会有很大的概率会失效。因此,需要确保在使用迭代器循环的时候不能往其操作的容器中添加新的元素。 需要注意的是 vector 有导致迭代器无效的潜在危险。比如像已经确定范围的 vector 遍历过程中再对该 vector 添加新的元素,那么迭代器会有很大的概率会失效。因此,需要确保在使用迭代器循环的时候不能往其操作的容器中添加新的元素。
 ===迭代器的运算=== ===迭代器的运算===
-迭代器通常支持位移(''++'')运算,比较运算和关系运算。String 和 Vector 额外支持一次移动迭代器好几位的运算:{{:programming:cpp:cpp_primer:iterator_arithmetic.jpg|}}+迭代器通常支持位移(''++'')运算,比较运算和关系运算。String 和 Vector 额外支持一次移动迭代器好几位的运算:{{cs:programming:cpp:cpp_primer:iterator_arithmetic.jpg|}}
 当迭代器进行算术运算的时候,参与运算的迭代器必须指向同一个容器内的元素,或者是指向容器最后一个元素的下一个位置(off-the-end-iterator)。下面一个例子使用了头部迭代器和 size 信息计算了容器中部的迭代器: 当迭代器进行算术运算的时候,参与运算的迭代器必须指向同一个容器内的元素,或者是指向容器最后一个元素的下一个位置(off-the-end-iterator)。下面一个例子使用了头部迭代器和 size 信息计算了容器中部的迭代器:
 <code cpp> <code cpp>
行 619: 行 619:
 ==C Library string functions== ==C Library string functions==
 C 中有操作该类字符串的函数,定义于 ''string.h'' 内(C++ 中是 ''cstring''): C 中有操作该类字符串的函数,定义于 ''string.h'' 内(C++ 中是 ''cstring''):
-{{ :programming:cpp:cpp_primer:cstring_func.jpg |}}+{{ cs:programming:cpp:cpp_primer:cstring_func.jpg |}}
 以上的函数均不会校验其收到的参数,因此需要特别注意参数的合法性。一个比较常见的错误就是将没有 //null terminated// 的字符串作为以上函数的参数: 以上的函数均不会校验其收到的参数,因此需要特别注意参数的合法性。一个比较常见的错误就是将没有 //null terminated// 的字符串作为以上函数的参数:
 <code cpp> <code cpp>