返回

探索 C++ 中字符串、向量和数组的魅力

见解分享

C++ Primer 第 3 章:字符串、向量和数组

在 C++ 标准库中,string 和 vector 是两个非常重要的类型。string 表示可变长度的字符序列,而 vector 则用于存放某种给定类型对象的可变长度序列。在本文中,我们将重点探讨字符串、向量和数组,以及如何有效地使用它们来构建健壮的 C++ 应用程序。

字符串:可变长度的字符序列

字符串在 C++ 中是一种非常重要的数据类型,用于表示可变长度的字符序列。它由一系列字符组成,每个字符占据一个字节。字符串可以用双引号(")或单引号(')括起来。

字符串的创建和初始化

创建字符串有以下几种方法:

  1. 使用字面量:最简单的方法是使用字面量。例如,以下代码创建了一个包含字符串 "Hello, world!" 的字符串变量:
string str = "Hello, world!";
  1. 使用 string 构造函数:也可以使用 string 构造函数来创建字符串。例如,以下代码创建了一个空的字符串:
string str;
  1. 使用其他字符串的副本:还可以使用另一个字符串的副本来创建字符串。例如,以下代码创建了一个包含字符串 "Hello, world!" 的字符串变量:
string str1 = "Hello, world!";
string str2(str1);
  1. 使用字符串的范围:还可以使用字符串的范围来创建字符串。例如,以下代码创建了一个包含字符串 "Hello" 的字符串变量:
string str1 = "Hello, world!";
string str2(str1.begin(), str1.begin() + 5);

字符串的操作

字符串提供了丰富的操作,包括:

  1. 字符串连接:可以使用 + 运算符来连接两个字符串。例如,以下代码将 "Hello" 和 "world!" 连接在一起:
string str1 = "Hello";
string str2 = "world!";
string str3 = str1 + str2;
  1. 字符串比较:可以使用 <、>、<=、>= 和 == 运算符来比较两个字符串。例如,以下代码比较两个字符串是否相等:
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;
}
  1. 字符串查找:可以使用 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;
}
  1. 字符串替换:可以使用 replace 函数来替换字符串中子串。例如,以下代码将字符串 "world" 替换为 "universe":
string str1 = "Hello, world!";
string str2 = "universe";
str1.replace(str1.find(str2), str2.length(), str2);
cout << str1 << endl; // 输出:Hello, universe!

向量:可变长度序列

向量是一种可变长度序列,它可以存放某种给定类型对象。向量使用连续的内存空间来存储元素,因此访问元素非常高效。

向量的创建和初始化

创建向量有以下几种方法:

  1. 使用默认构造函数:最简单的方法是使用默认构造函数。例如,以下代码创建了一个空的向量:
vector<int> v;
  1. 使用大小构造函数:也可以使用大小构造函数来创建向量。例如,以下代码创建了一个包含 10 个元素的向量:
vector<int> v(10);
  1. 使用其他向量的副本:还可以使用另一个向量的副本来创建向量。例如,以下代码创建了一个包含另一个向量的副本:
vector<int> v1 = {1, 2, 3, 4, 5};
vector<int> v2(v1);
  1. 使用范围:还可以使用范围来创建向量。例如,以下代码创建了一个包含数组 {1, 2, 3, 4, 5} 的向量:
int arr[] = {1, 2, 3, 4, 5};
vector<int> v(arr, arr + 5);

向量的操作

向量提供了丰富的操作,包括:

  1. 向量元素访问:可以使用下标运算符 [] 来访问向量的元素。例如,以下代码访问向量的第一个元素:
vector<int> v = {1, 2, 3, 4, 5};
int firstElement = v[0];
  1. 向量元素修改:可以使用下标运算符 [] 来修改向量的元素。例如,以下代码将向量的第一个元素修改为 10:
vector<int> v = {1, 2, 3, 4, 5};
v[0] = 10;
  1. 向量元素插入:可以使用 insert 函数来在向量中插入元素。例如,以下代码在向量的第一个元素之前插入元素 0:
vector<int> v = {1, 2, 3, 4, 5};
v.insert(v.begin(), 0);
  1. 向量元素删除:可以使用 erase 函数来从向量中删除元素。例如,以下代码从向量中删除第一个元素:
vector<int> v = {1, 2, 3, 4, 5};
v.erase(v.begin());

数组:固定长度序列

数组是一种固定长度序列,它可以存放某种给定类型对象。数组使用连续的内存空间来存储元素,因此访问元素非常高效。

数组的创建和初始化

创建数组有以下几种方法:

  1. 使用数组字面量:最简单的方法是使用数组字面量。例如,以下代码创建了一个包含 5 个元素的数组:
int arr[] = {1, 2, 3, 4, 5};
  1. 使用数组构造函数:也可以使用数组构造函数来创建数组。例如,以下代码创建了一个包含 5 个元素的数组:
int arr[5] = {1, 2, 3, 4, 5};
  1. 使用其他数组的副本:还可以使用另一个数组的副本来创建数组。例如,以下代码创建了一个包含另一个数组的副本:
int arr1[] = {1, 2, 3, 4, 5};
int arr2[5];
for (int i = 0; i < 5; i++) {
  arr2[i] = arr1[i];
}

数组的操作

数组提供了丰富的操作,包括:

  1. 数组元素访问:可以使用下标运算符 [] 来访问数组的元素。例如,以下代码访问数组的第一个元素:
int arr[] = {1, 2, 3, 4, 5};
int firstElement = arr[0];
  1. 数组元素修改:可以使用下标运算符 [] 来修改数组的元素。例如,以下代码将数组的第一个元素修改为 10:
int arr[] = {1, 2, 3, 4, 5};
arr[0] = 10;
  1. 数组元素插入:数组不能插入元素。

  2. 数组元素删除:数组不能删除元素。

总结

字符串、向量和数组是 C++ 中非常重要的数据结构。它们都可以用于存储数据,但各有其特点。字符串用于存储可变长度的字符序列,向量用于存储可变长度序列,数组用于存储固定长度序列。在实际应用中,我们可以根据具体情况选择使用哪种数据结构。