概述
第三章 字符串、向量和数组
标准库类型 string
-
头文件:
#include <string>
-
string定义和初始化:
string s1; string s1(s2); string s1 = "hello"; //注意:与下一个语句等价,这里字面值“hello”的空字符并未保存到s1. string s1("hello"); string s1(n, 'c');
-
string对象的操作:
cin>>s1; cout<<s1; geline(cin, s1); s.empty(); s.size(); s[n]; s1 + s2; s1 = s2; s1 == s2; s1 != s2; < > <= >=
注意事项:
geline(cin, s); 和 cin>>s; 的区别:
- geline从输入流中读取,直至遇到换行符停止,换行符也被读取,但是s中并不保存换行符;
若第一个字符就读到换行符,则s为空 - cin>>s 从第一个非空白字符开始,直至遇到第一个空白符结束
s.size()的返回值为
string::size_type
类型,是无符号数-
定义该类型的变量可以直接使用:
decltype(s.size()) i = 0;
-
string 和 字符字面值 或 字符串字面值 混合相加时,必须确保加号左右两侧至少得有一个string类型
- geline从输入流中读取,直至遇到换行符停止,换行符也被读取,但是s中并不保存换行符;
-
string中的字符的操作:
头文件:
#include <cctype>
标准库类型 vector
-
头文件:#include
-
vector定义和初始化:
vector<int> a; vector<int> b(a); vector<string> c{"kk", "mm", "n"}; vector<int> d(10); vector<int> d(10, 2); vector<string> str(10); vector<string> str(10, "hi");
-
vector对象的操作:
v.empty(); v.size(); v.push_back(t); v[n]; v1 = v2; v1 = {a, b, c...}; v1 == v2; v1 != v2; < > <= >=;
-
v.size() 的返回值 是
vector<int>::size_type
类型 /vector<string>::size_type
等等 -
如果循环体内包含向vector对象添加元素的语句,则不能使用范围for循环
-
迭代器与指针
-
指针就是一种迭代器
-
迭代器可以进行的操作和用法 与 指针几乎相同
-
迭代器的类型:
vector<int>::iterator it; //it可以读写vector<int>的元素 string::iterator it; vector<int>::const_iterator it; //只读 string::const_iterator it;
-
迭代器的使用:
-
对于类类型:使用成员函数begin() end() cbegin() cend()
auto beg = it.begin();
-
对于数组:使用标准库函数begin() end()
int *beg = begin(array_name);
-
string对象 字符串字面量 数组 三者的关系
-
使用字符串字面量初始化string
string s{"hello"};
-
使用string初始化字符串指针
char *str = s.c_str(); //s.c_str()函数返回值一个指针,该指针指向一个以空字符结束的字符数组
-
使用数组初始化vector
int array[10]; vector<int> vec{begin(array), end(array)}; //可对上式begin和end处进行适当运算,只使用数组array的一部分初始化vertor
多维数组
- 范围for语句处理多维数组易错点
- 范围for循环嵌套使用时,为避免数组被自动转为指针,将外层循环的控制变量声明成引用
- 处理多维数组的4种方法:
- 传统C语言指针
- 使用auto decltype
- 迭代器
- 类型别名简化指针
最后
以上就是悲凉草莓为你收集整理的第三章 字符串、向量和数组第三章 字符串、向量和数组的全部内容,希望文章能够帮你解决第三章 字符串、向量和数组第三章 字符串、向量和数组所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复