C++ Primer学习笔记:string、vector、迭代器以及数组,只记录不会或不熟悉的地方
博客小站:blog.smartdog.top
命名空间
使用标准输入输出命名空间,:: 域操作符表示:编译器应从操作符左侧名字所示的作用域中寻找右侧那个名字。
使用 using 可以引入某个命名空间中的成员,再使用时不需要写命名空间:- // using namespace::name;
- using std::cin;
- // 后面省略命名空间,直接写 cin>>a;
复制代码头文件中一般来说不应该包含using声明,因为头文件会被拷贝到引用它的文件中,造成命名冲突。
string
初始化
- #include <string>
- using std::string;
- string s1;
- string s2 = s1; // 等价 string s2(s1)
- string s3 = "hello"; // 等价 string s3("hello")
- string s4(10,'c'); // s4内容是10个c
复制代码 使用等号是拷贝初始化,编译器把等号右侧的初始值拷贝到新创建的对象中去。不使用等号,像 s4,执行的是直接初始化。
s4的形式可以写成 string s4 = string(10,'c');,等价于string temp(10,'c'); string s4 = temp;,并没有任何补偿优势。
操作
- os<<s;
- is>>s;
- getline(is,s); // 从is中读取一行赋值给s,返回is,用来保留输入时的空白符
- s.empty();
- s.size(); // 字符个数
- s[n];
- s1 + s2;
- s1 = s2;
- s1 == s2; // string对象的相等性判断对字母大小写敏感
- s1 != s2;
- <, <=, >, >=; //字典序比较
复制代码 string::size_type 类型
string.size() 函数返回的是一个 string::size_type 类型的值。
string 类及其他大多数标准类型都定义了几种配套的类型。这些配套类型体现了标准库类型与机器无关的特性,类型 size_type 即是其中的一种。在具体使用的时候,通过作用域操作符来表明名字 size_type 是在类 string 中定义的。
因为 size 函数返回的是一个无符号整数,所以不要让 size() 函数和 int 在一个表达式中,避免混用 int 和 unsigned 可能带来的问题。
字面值和string对象相加
需要确保 加法运算符了两侧至少一个是 string:- string s4 = s1 + ", "; // 对
- string s5 = "hello" + " ,"; // 错
- string s6 = s1 + ", " + "world"; // 错
- string s7 = "hello" + ", " + s1; // 错
复制代码因为某些历史原因,也为了与C兼容,所以C++语言中的字符串字面值并不是标准库类型string的对象。
处理string对象中的字符
在 cctype头文件中定义了一组标准库函数。- #include "cctype";
- isalnum(c); // 字母或数字
- isalpha(c); // 字母
- iscntrl(c); // 控制字符
- isdigit(c); // 数字
- isgraph(c); // 不是空格但可打印
- islower(c); // 小写字母
- isprint(c); // 可打印字符
- ispunct(c); // 标点符号
- isspace(c); // 空白(控制、横向纵向制表符、回车符、换行符、进纸符
- isupper(c); // 大写字母
- isxdigit(c); // 十六进制数字
- tolower(c); // to小写字母
- toupper(c); // to大写字母
复制代码 for循环改变字符串中的字符
[code]string s("Hello world!!!");for(auto &c : s){ // 如果要改变,需要是引用 c = toupper(c);}cout=, |