C++基本类型

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() // 返回 size_type类型, 无符号类型

// 索引
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> >, 即在两个右尖括号间需要多加一个空格

定义及初始化

  1. 默认初始化: vector<T> v1
  2. 拷贝初始化: vector<T> v2(v1) , vector<T> v2 = v1
  3. 列表初始化: vector<string> v3 = {"a", "an", "the"} , vector<string> v3{"a", "an", "the"}
  4. 创建指定数量的元素: vector<int> ivec(10, -1)
  5. 值初始化: 使用类型的默认初始值

元素操作

  1. 加到尾端: v.push_back(i)
  2. 判断为空: v.empty()
  3. 元素个数: v.size()
  4. 元素引用: v[i]
  5. 拷贝操作: v1 = v2 , v1 = {a, b, c, ...}
  6. 判断相等: v1 == v2 , v1 != v2
  7. 比较操作: < <= > >=
  8. 在循环内部包含向vector添加元素操作时, 不宜使用范围for循环

迭代器

  1. 标准库容器类型都支持迭代器, 如: vector
  2. string非容器类型, 但支持迭代器
  3. 有迭代器的类型都拥有beginend成员
  4. auto b = v.begin(), e = v.end()
  5. begin()返回一种引用, 并指向第一个元素, end()指向尾元素的下一位置, 即不存在的一个位置, 称为"尾后迭代器"
  6. 如果容器为空, 则begin()end()返回同一迭代器, 都是"尾后迭代器"
  7. cbegin() , cend() 返回常量迭代器
  8. 但凡使用了迭代器的循环体, 都不要向迭代器所属的容器添加元素

运算符

  1. *iter 返回迭代器iter所指元素的引用
  2. iter->a 解引用并返回其指向元素成员
  3. (*it).a = it->a
  4. ++iter / --iter 返回下/上一个元素
  5. iter1 == / != iter2 判断两个迭代器是否相等
  6. iter + / - n 向下/上移动n个元素
  7. += -= 复合赋值语句
  8. iter1 - iter2 返回之间的距离
  9. > >= < <= 关系运算符
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);
作者

Cheng

发布于

2018-12-29

更新于

2022-08-06

许可协议

评论