Loading... # C++ string and vector ## string 标准库类型 **string** 表示可变长的字符序列,使用 string 类型必须首先包含 string 头文件。 `#include<string>` `using std::<string>` ### 定义和初始化string对象 下列列出了string对象最常用的一些方式: ```cpp string s1; //默认初始化,s1是一个空串 string s2 = s1; //s2是s1的副本 string s3 ="hiya"; //s3是该字符串字面值的副本 string s4(10,'c') //s4的内容是 cccccccccc ``` 可以通过默认的方式初始化一个 string 对象,这样就会得到一个空的 string 对象,也就是说<mark>该 string 对象中没有任何字符</mark>。如果提供了一个字符串字面值,则该字面值除了最后那个空字符以外其他的所有字符都被拷贝到新创建的 string 对象中去。 ```cpp string s1 //默认初始化,s1是一个空串 string s2(s1) //s2是s1的副本 string s2 = s1 //等价于s2(s1),s2是s1的副本 string ("value") //s3是字面值"value"的副本,除了字面值最后的那个空字符外 string "value" //等价于s3("value"),s3是字面值"value"的副本 string s4(n,'c') //把s4初始化为连续n个字符c组成的串 ``` ### 直接初始化和拷贝初始化 如果使用等号(=)初始化一个变量,实际上执行的<mark>是拷贝初始化</mark>,编译器把等号右侧的初始值拷贝到新创建的对象中去。与之相反,<mark>如果不使用等号,则执行的是直接初始化</mark> ```cpp string s5 = "hiya"; //拷贝初始化 string s6("hiya"); //直接初始化 string s7(10,'c'); //直接初始化,s7的内容ccccccccccc ``` 对于用多个值进行初始化的情况,非要用拷贝初始化的方式来处理,需要先创建一个显式地创建一个(临时)对象用于拷贝: ```cpp string s8 = string(10,'c'); //拷贝初始化,s8的内容是cccccccccc ``` 实际上是用数字10和字符c两个参数创建出来的一个string对象,然后这个string对象又拷贝给了s8。这条语句本质上等价于下面的两条语句: ```cpp string temp(10, 'c'); //temp的内容是cccccccccc //temp 临时变量 string s8 = temp; //将temp拷贝给s8 ``` ### string对象上的操作 ```cpp os << s 将s写到输出流os当中,返回os is >> s 从is中读取字符串赋给s,字符串以空白分隔,返回is getline(is,s) 从is中读取一行赋给s,返回is s.empty() s为空返回true,否则返回false s.size() 返回s中字符的个数 s[n] 返回s中第n个字符的引用,位置n从0计起 s1 + s2 返回s1 和 s2连接后的结果 s1 = s2 用s2的副本代替是s1中原来的字符 s1 == s2 如果s1和s2中所含的字符完全一样,则它们相等;string对象的相等性判断对字面的大小写敏感 s1 != s2 <, <=, >, >= 利用字符在字典中的顺序进行比较,且对字母的大小写敏感 ``` ### 读写string对象 ```cpp int main(){ string s; //空字符串 cin >> s; //将string对象读入s,**遇到空白则停止** cout << s << endl; //输出s return 0; } ``` 在执行读取操作时,string对象会自动忽略开头的空白(即空格符、换行符、制表符等)并从第一个真正的字符开始读起,<mark>直到遇到下一个空白为止。</mark> 例如: ```cpp int main(){ string s; cin >> s; //输入 hello word cout << s << endl; } ``` 输出结果如下: ![结果](https://kdmy.xyz/xuexitu/CPP/Cpp.png) 如上所述,如果程序输入的是:" hello word "(注意开头和结尾的空格),则输出将是<mark>"hello"</mark>,输出结果中没有任何空格。 ```C++ string s1, s2; cin >> s1 >> s2; //把第一个输入读到s1中,第二个输入读到s2中 cout << s1 << s2 << endl; //输出两个string对象 ``` 假设给上面这段程序输入与之前一样的内容" hello word! ",输出的将是"helloword!" ### 使用geline读取一整行(待更新) # vector容器 ## 定义和初始化vector对象 ```cpp vector<T> v1 v1是一个空vector,它潜在的元素是T类型的,执行默认初始化 vector<T> v2(v1) v2中包含有v1所有元素的副本 vector<T> v2 = v1 等价于v2(v1),v2包含有v1所有元素的副本 vector<T> v3(n, val) v3包含了n个重复的元素,每个元素的值都是val vector<T> v4(n) v4包含了n个重复的执行了值初始化的对象 vector<T> v5{a,b,c...} v5包含了初始值个数的元素,每个元素被赋予相应的初始值 vector<T> v5 = {a,b,c...} 等价于v5{a,b,c...} ``` 最后修改:2024 年 03 月 19 日 © 允许规范转载 打赏 赞赏作者 支付宝 赞 如果觉得我的文章对你有用,请随意赞赏