String
|| vector
string
定义及初始化
1 2 3 4 5 6 7 8 9 10 11
| string s1;
string s2 = s1; string s3 = "Hello";
string s2(s1); string s3("Hello"); string s4(10, 'c');
|
对象操作
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| cin >> s cout << s getline(cin, s)
s.empty() s.size()
s[n] for (auto c : s)
s1 + s2 s1 = s2 s1 == s2 s1 != s2 < <= > >=
|
范围for
语句
1 2 3 4 5 6 7 8
| for (declaration : expression) statement for (auto c : str) cout << c << endl;
for (auto &c : str) c = toupper(c);
|
vector
vector
是一个类模板,因此需要在使用时提供额外信息来指定模板到底实例化成什么样的类,提供信息的方式为: vector<class>
如: vector<int>
vector<vector<string>>
在C++的早期版本中, 嵌套的vector
需要表示成: vector<vector<string> >
, 即在两个右尖括号间需要多加一个空格
定义及初始化
- 默认初始化:
vector<T> v1
- 拷贝初始化:
vector<T> v2(v1)
, vector<T> v2 = v1
- 列表初始化:
vector<string> v3 = {"a", "an", "the"}
, vector<string> v3{"a", "an", "the"}
- 创建指定数量的元素:
vector<int> ivec(10, -1)
- 值初始化: 使用类型的默认初始值
元素操作
- 加到尾端:
v.push_back(i)
- 判断为空:
v.empty()
- 元素个数:
v.size()
- 元素引用:
v[i]
- 拷贝操作:
v1 = v2
, v1 = {a, b, c, ...}
- 判断相等:
v1 == v2
, v1 != v2
- 比较操作:
< <= > >=
- 在循环内部包含向
vector
添加元素操作时, 不宜使用范围for
循环
迭代器
- 标准库容器类型都支持迭代器, 如:
vector
string
非容器类型, 但支持迭代器
- 有迭代器的类型都拥有
begin
和end
成员
auto b = v.begin(), e = v.end()
begin()
返回一种引用, 并指向第一个元素, end()
指向尾元素的下一位置, 即不存在的一个位置, 称为"尾后迭代器"
- 如果容器为空, 则
begin()
与end()
返回同一迭代器, 都是"尾后迭代器"
cbegin()
, cend()
返回常量迭代器
- 但凡使用了迭代器的循环体, 都不要向迭代器所属的容器添加元素
运算符
*iter
返回迭代器iter所指元素的引用
iter->a
解引用并返回其指向元素成员
(*it).a
= it->a
++iter / --iter
返回下/上一个元素
iter1 == / != iter2
判断两个迭代器是否相等
iter + / - n
向下/上移动n个元素
+= -=
复合赋值语句
iter1 - iter2
返回之间的距离
> >= < <=
关系运算符
1 2 3 4 5 6 7
| string s("some string"); if (s.begin() != s.end()) { auto it = s.begin(); *it = toupper(*it); }
|
1 2 3
| for (auto it = s.begin(); it != s.end(); it++) *it = toupper(*it);
|