C++字符串string、向量vector和数组

1. 简介

在C++中,字符串string、向量vector和数组都是常见的数据结构。它们在程序中的使用相似,但又有所不同。

2. 字符串string

2.1 定义和初始化

string是一种STL类,也是C++中常用的字符串类型。可以用相应的构造函数或者运算符对其进行初始化。下面是一些常见的初始化方式:

// default constructor,创建一个空的字符串

string str1;

// 字符串常量初始化

string str2("Hello, World!");

// 复制构造函数

string str3(str2);

// 通过赋值运算符或者assign函数进行初始化

string str4;

str4 = "Hello, C++!";

str4.assign("Hello, C++!");

2.2 字符串操作

string的成员函数可以方便地对字符串进行修改和操作。以下是一些常用的成员函数:

size():字符串的长度(即字符的个数)

at():返回指定位置的字符

operator []:返回指定位置的字符

append():将字符串或字符序列附加到当前字符串末尾

insert():在指定位置插入一个字符或字符串

erase():删除指定位置的字符或一个字符序列

replace():替换指定位置的字符或一个字符序列

find():在字符串中查找一个子串

substr():返回一个子串

下面是一些字符串操作的示例代码:

// 声明和初始化

string str("Hello, World!");

// 输出字符串的长度

cout << "The length of the string is " << str.size() << endl;

// 访问字符串中的字符

cout << "The first character is " << str[0] << endl;

// 在字符串末尾添加一个字符

str.append(1, '!');

// 在指定位置插入一个字符

str.insert(7, ", C++");

// 删除指定位置的字符

str.erase(12, 1);

// 替换指定位置的字符

str.replace(7, 1, "++");

// 在字符串中查找一个子串

int pos = str.find("World");

if (pos != string::npos) {

cout << "Found 'World' at position " << pos << endl;

}

// 返回一个子串

string substr = str.substr(7, 6);

cout << "The substring is " << substr << endl;

2.3 对比和拼接

可以用运算符对两个字符串进行对比或拼接。下面是一些示例代码:

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;

}

// 拼接两个字符串

string str3 = str1 + ", " + str2;

cout << "The concatenated string is " << str3 << endl;

3. 向量vector

3.1 定义和初始化

vector是一种动态数组,可以在运行时动态扩展。可以用相应的构造函数或者运算符对其进行初始化。下面是一些常见的初始化方式:

// default constructor,创建一个空的向量

vector<int> vec1;

// 创建一个指定大小的向量

vector<int> vec2(5);

// 创建一个指定大小,并初始化每个元素的向量

vector<int> vec3(5, 0);

// 复制构造函数

vector<int> vec4(vec3);

// 通过赋值运算符或者assign函数进行初始化

vector<int> vec5;

vec5 = {1, 2, 3};

vec5.assign({4, 5, 6});

3.2 向量操作

vector的成员函数可以方便地对向量进行修改和操作。以下是一些常用的成员函数:

size():向量中元素的个数

at():返回指定位置的元素

operator []:返回指定位置的元素

push_back():在向量的末尾添加一个元素

pop_back():删除向量的末尾元素

insert():在指定位置插入一个元素或元素序列

erase():删除指定位置的元素或一个元素序列

clear():删除向量中的所有元素

下面是一些向量操作的示例代码:

// 声明和初始化

vector<int> vec{1, 2, 3, 4, 5};

// 输出向量的长度

cout << "The size of the vector is " << vec.size() << endl;

// 访问向量中的元素

cout << "The first element is " << vec[0] << endl;

// 在向量末尾添加一个元素

vec.push_back(6);

// 在指定位置插入一个元素

vec.insert(vec.begin() + 2, 0);

// 删除向量的末尾元素

vec.pop_back();

// 删除指定位置的元素

vec.erase(vec.begin() + 3);

// 删除一个元素序列

vec.erase(vec.begin() + 1, vec.end() - 2);

// 删除向量中的所有元素

vec.clear();

3.3 遍历和排序

vector可以用迭代器进行遍历。还可以用STL中的sort函数对向量的元素进行排序。下面是一些示例代码:

vector<int> vec{3, 4, 1, 2, 5};

// 遍历向量

for (auto it = vec.begin(); it != vec.end(); ++it) {

cout << *it << ' ';

}

cout << endl;

// 对向量的元素进行排序

sort(vec.begin(), vec.end());

// 再次遍历向量

for (int i = 0; i < vec.size(); ++i) {

cout << vec[i] << ' ';

}

cout << endl;

4. 数组

4.1 定义和初始化

C++中的数组是一种固定大小的容器,在声明时需要指定数组的类型和大小。下面是一些常见的数组定义方式:

int arr1[5]; // 定义一个有5个元素的整型数组

int arr2[] = {1, 2, 3}; // 定义并初始化一个整型数组

int arr3[3][2] = {{1, 2}, {3, 4}, {5, 6}}; // 定义了一个3行2列的二维数组

4.2 数组操作

数组的元素可以用下标进行访问和修改。以下是一些数组操作的示例代码:

int arr[] = {1, 2, 3, 4, 5};

// 输出数组的长度

cout << "The size of the array is " << sizeof(arr) / sizeof(int) << endl;

// 访问数组中的元素

cout << "The first element is " << arr[0] << endl;

// 修改数组中的元素

arr[1] = 0;

// 遍历数组

for (int i = 0; i < sizeof(arr) / sizeof(int); ++i) {

cout << arr[i] << ' ';

}

cout << endl;

4.3 指针和动态内存分配

数组的名字可以被视为指向第一个元素的指针,在C++中可以使用指针来操作数组。此外,还可以使用new运算符在动态内存中创建数组。以下是一些数组操作的示例代码:

int arr[] = {1, 2, 3, 4, 5};

// 使用指针遍历数组

for (int* p = arr; p != arr + sizeof(arr) / sizeof(int); ++p) {

cout << *p << ' ';

}

cout << endl;

// 在动态内存中创建数组

int* p = new int[5];

for (int i = 0; i < 5; ++i) {

p[i] = i + 1;

cout << p[i] << ' ';

}

cout << endl;

delete[] p;

5. 总结

字符串string、向量vector和数组都是C++中常用的数据结构,它们都有各自的优点和用途。在使用时需要根据具体的需求选择合适的数据结构。

免责声明:本文来自互联网,本站所有信息(包括但不限于文字、视频、音频、数据及图表),不保证该信息的准确性、真实性、完整性、有效性、及时性、原创性等,版权归属于原作者,如无意侵犯媒体或个人知识产权,请来电或致函告之,本站将在第一时间处理。猿码集站发布此文目的在于促进信息交流,此文观点与本站立场无关,不承担任何责任。

上一篇:c++定义数组的方法

下一篇:c++怎么运行

后端开发标签