What & How & Why

差别

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

到此差别页面的链接

两侧同时换到之前的修订记录前一修订版
后一修订版
前一修订版
cs:programming:cpp:courses:cpp_basic_deep:chpt_3 [2024/04/18 03:31] – [多维数组的遍历] codingharecs:programming:cpp:courses:cpp_basic_deep:chpt_3 [2024/04/18 04:55] (当前版本) – [string 的使用方法] codinghare
行 382: 行 382:
 A z2[3]; //等价与 int z2[4][3]; A z2[3]; //等价与 int z2[4][3];
 </code> </code>
 +====Vector====
 +  * 标准库提供的序列容器(类模板)
 +  * 可复制,可动态更改个数
 +<code cpp>
 +//使用需要包含头文件 vector
 +#include <vector>
 +//类型是 vector<int>
 +std::vector<int> x = {1,2,3};
 +//可复制
 +std::vector<int> y;
 +y = x;
 +</code>
 +===Vector 的初始化===
 +  * 默认初始化为 0 个元素
 +  * 支持各种初始化
 +<code cpp>
 +//聚合初始化,x 的元素为 1,2,3
 +//使用 brace
 +std::vector<int> x = {1,2,3};
  
 +//init with default element count
 +//使用panthesis
 +//y 是 3个元素的 vector,每个元素都被默认初始化为 0
 +std::vector<int> y(3);
 +//count + value
 +//z 中有 3 个元素 都是 1
 +std::vector<int> z(3,1);
 +</code>
 +===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();
 +</code>
 +===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::cout << elem << " ";
 +    }
 +</code>
 +===迭代器===
 +  * std 容器中,通常使用迭代器模拟代替指针
 +  * 迭代器可以:
 +    * 解引用
 +    * 下标访问会产生 *(x + index) 的行为
 +    * 可以移动,相减(必须指向同一个 vector)
 +==Vector 的比较==
 +  * 位数相同且元素相同,则相等
 +  * 如果一长一短,短 vector 与长 vector 对应位置内容相同,则长的较大
 +  * 否则按位比较,找到的第一组不相同元素中,较大元素所在的 vector 较大
 +===Vector 的其他细节===
 +  * 改变 vector 元素数量可能会导致迭代器失效
 +  * Vector 支持多维
 +<code cpp>
 +//元素是 Int vector 的 vector
 +std::vector<std::vector<int>> x;
 +</code>
 +  * 支持取地址并调用运算符(''->''
 +<code cpp>
 +std::vector<int>* ptr = &x;
 +ptr->size(); //equal *(ptr).size()
 +</code>
 +  * size() 返回的是 ''size_type''
 +====std::string====
 +  * 特化自 ''std::basic_string<char>''
 +  * 可复制,可改变字符串长度
 +===string 的使用方法===
 +<code cpp>
 +//需要引入头文件
 +#include <string>
 +//初始化
 +std::string myStr = "helleworld";
 +
 +//使用多次复制目标字符作为初始值
 +//结果是 'aaa'
 +std::string myStr2(3, 'a');
 +//拷贝初始化
 +std::string myStr3 = myStr;
 +std::string myStr4(myStr);
 +
 +//比较尺寸size & empty
 +//比较 == > <,比较规则与 vector 同,按字符为单位比较
 +//赋值
 +std::string newStr;
 +newStr = myStr;
 +//拼接
 +newStr = myStr + myStr2;
 +newStr = myStr + "hellWorld";
 +//string + 的重载左边要求对象类型是 std::string,所以 c-string 不能放到加号左边
 +//error
 +newStr = "hello" + myStr;
 +//索引
 +myStr[0];
 +</code>
 +==转化 std::string 到 c-string==
 +<code cpp>
 +//返回指向一个 Null teminated(\0) 的 const char* 指针
 +myStr.c_str();
 +</code>