返回
探索 C++ 中字符串、向量和数组的魅力
见解分享
2023-11-12 13:12:08
C++ Primer 第 3 章:字符串、向量和数组
在 C++ 标准库中,string 和 vector 是两个非常重要的类型。string 表示可变长度的字符序列,而 vector 则用于存放某种给定类型对象的可变长度序列。在本文中,我们将重点探讨字符串、向量和数组,以及如何有效地使用它们来构建健壮的 C++ 应用程序。
字符串:可变长度的字符序列
字符串在 C++ 中是一种非常重要的数据类型,用于表示可变长度的字符序列。它由一系列字符组成,每个字符占据一个字节。字符串可以用双引号(")或单引号(')括起来。
字符串的创建和初始化
创建字符串有以下几种方法:
- 使用字面量:最简单的方法是使用字面量。例如,以下代码创建了一个包含字符串 "Hello, world!" 的字符串变量:
string str = "Hello, world!";
- 使用 string 构造函数:也可以使用 string 构造函数来创建字符串。例如,以下代码创建了一个空的字符串:
string str;
- 使用其他字符串的副本:还可以使用另一个字符串的副本来创建字符串。例如,以下代码创建了一个包含字符串 "Hello, world!" 的字符串变量:
string str1 = "Hello, world!";
string str2(str1);
- 使用字符串的范围:还可以使用字符串的范围来创建字符串。例如,以下代码创建了一个包含字符串 "Hello" 的字符串变量:
string str1 = "Hello, world!";
string str2(str1.begin(), str1.begin() + 5);
字符串的操作
字符串提供了丰富的操作,包括:
- 字符串连接:可以使用 + 运算符来连接两个字符串。例如,以下代码将 "Hello" 和 "world!" 连接在一起:
string str1 = "Hello";
string str2 = "world!";
string str3 = str1 + str2;
- 字符串比较:可以使用 <、>、<=、>= 和 == 运算符来比较两个字符串。例如,以下代码比较两个字符串是否相等:
string str1 = "Hello";
string str2 = "world!";
if (str1 == str2) {
cout << "The two strings are equal." << endl;
} else {
cout << "The two strings are not equal." << endl;
}
- 字符串查找:可以使用 find 函数来查找字符串中子串的位置。例如,以下代码查找字符串 "world" 在字符串 "Hello, world!" 中的位置:
string str1 = "Hello, world!";
string str2 = "world";
size_t pos = str1.find(str2);
if (pos != string::npos) {
cout << "The substring was found at position " << pos << endl;
} else {
cout << "The substring was not found." << endl;
}
- 字符串替换:可以使用 replace 函数来替换字符串中子串。例如,以下代码将字符串 "world" 替换为 "universe":
string str1 = "Hello, world!";
string str2 = "universe";
str1.replace(str1.find(str2), str2.length(), str2);
cout << str1 << endl; // 输出:Hello, universe!
向量:可变长度序列
向量是一种可变长度序列,它可以存放某种给定类型对象。向量使用连续的内存空间来存储元素,因此访问元素非常高效。
向量的创建和初始化
创建向量有以下几种方法:
- 使用默认构造函数:最简单的方法是使用默认构造函数。例如,以下代码创建了一个空的向量:
vector<int> v;
- 使用大小构造函数:也可以使用大小构造函数来创建向量。例如,以下代码创建了一个包含 10 个元素的向量:
vector<int> v(10);
- 使用其他向量的副本:还可以使用另一个向量的副本来创建向量。例如,以下代码创建了一个包含另一个向量的副本:
vector<int> v1 = {1, 2, 3, 4, 5};
vector<int> v2(v1);
- 使用范围:还可以使用范围来创建向量。例如,以下代码创建了一个包含数组 {1, 2, 3, 4, 5} 的向量:
int arr[] = {1, 2, 3, 4, 5};
vector<int> v(arr, arr + 5);
向量的操作
向量提供了丰富的操作,包括:
- 向量元素访问:可以使用下标运算符 [] 来访问向量的元素。例如,以下代码访问向量的第一个元素:
vector<int> v = {1, 2, 3, 4, 5};
int firstElement = v[0];
- 向量元素修改:可以使用下标运算符 [] 来修改向量的元素。例如,以下代码将向量的第一个元素修改为 10:
vector<int> v = {1, 2, 3, 4, 5};
v[0] = 10;
- 向量元素插入:可以使用 insert 函数来在向量中插入元素。例如,以下代码在向量的第一个元素之前插入元素 0:
vector<int> v = {1, 2, 3, 4, 5};
v.insert(v.begin(), 0);
- 向量元素删除:可以使用 erase 函数来从向量中删除元素。例如,以下代码从向量中删除第一个元素:
vector<int> v = {1, 2, 3, 4, 5};
v.erase(v.begin());
数组:固定长度序列
数组是一种固定长度序列,它可以存放某种给定类型对象。数组使用连续的内存空间来存储元素,因此访问元素非常高效。
数组的创建和初始化
创建数组有以下几种方法:
- 使用数组字面量:最简单的方法是使用数组字面量。例如,以下代码创建了一个包含 5 个元素的数组:
int arr[] = {1, 2, 3, 4, 5};
- 使用数组构造函数:也可以使用数组构造函数来创建数组。例如,以下代码创建了一个包含 5 个元素的数组:
int arr[5] = {1, 2, 3, 4, 5};
- 使用其他数组的副本:还可以使用另一个数组的副本来创建数组。例如,以下代码创建了一个包含另一个数组的副本:
int arr1[] = {1, 2, 3, 4, 5};
int arr2[5];
for (int i = 0; i < 5; i++) {
arr2[i] = arr1[i];
}
数组的操作
数组提供了丰富的操作,包括:
- 数组元素访问:可以使用下标运算符 [] 来访问数组的元素。例如,以下代码访问数组的第一个元素:
int arr[] = {1, 2, 3, 4, 5};
int firstElement = arr[0];
- 数组元素修改:可以使用下标运算符 [] 来修改数组的元素。例如,以下代码将数组的第一个元素修改为 10:
int arr[] = {1, 2, 3, 4, 5};
arr[0] = 10;
-
数组元素插入:数组不能插入元素。
-
数组元素删除:数组不能删除元素。
总结
字符串、向量和数组是 C++ 中非常重要的数据结构。它们都可以用于存储数据,但各有其特点。字符串用于存储可变长度的字符序列,向量用于存储可变长度序列,数组用于存储固定长度序列。在实际应用中,我们可以根据具体情况选择使用哪种数据结构。