命名空间的using声明:
在C++中,使用using声明可以简化对命名空间中成员的访问。通过using声明,可以将特定的命名空间中的成员引入到当前作用域中,使其可以直接使用,而无需使用限定符来访问。
例如,假设有一个命名空间叫做"example",其中包含一个函数叫做"func",可以使用using声明来引入该函数:
#include <iostream>
namespace example {
void func() {
std::cout << "Hello, World!" << std::endl;
}
}
int main() {
using example::func;
func(); // 直接调用func,无需限定符
return 0;
}
标准库类型string:
在C++中,标准库中提供了string类型,用于表示和操作字符串。string类型提供了一系列成员函数和操作符,可以方便地进行字符串的处理。
定义和初始化string对象:
可以使用多种方式定义和初始化string对象。以下是几个常见的例子:
#include <string>
std::string str1; // 默认初始化,创建一个空字符串
std::string str2 = "Hello"; // 使用字符串字面值初始化
std::string str3("World"); // 使用字符串字面值初始化
std::string str4(str2); // 使用另一个string对象初始化
string对象上的操作:
string对象上有许多常用的操作,包括字符串的连接、比较、查找、截取等。以下是一些示例:
std::string str = "Hello, World!";
str.size(); // 返回字符串的长度
str.empty(); // 判断字符串是否为空
str += " Welcome"; // 字符串连接
str.append(" to C++"); // 字符串连接
str.compare("Hello"); // 比较字符串,返回0表示相等
str.find("World"); // 查找子串的位置
str.substr(7, 5); // 截取子串
str.replace(7, 5, "Universe"); // 替换子串
str.erase(7, 8); // 删除子串
处理string对象中的字符:
可以使用下标运算符 [] 或 at() 函数来访问string对象中的字符,并进行相应的处理。
std::string str = "Hello, World!";
char c1 = str[0]; // 使用下标访问字符
char c2 = str.at(7); // 使用at()函数访问字符
str[0] = 'h'; // 修改字符
str.at(7) = 'w'; // 修改字符
标准库类型vector:
在C++中,标准库中提供了vector类型,用于表示动态数组。vector提供了一系列成员函数和操作符,可以方便地进行数组的操作和管理。
定义和初始化vector对象:
可以使用多种方式定义和初始化vector对象。以下是几个常见的例子:
#include <vector>
std::vector<int> vec1; // 默认初始化,创建一个空的int类型的vector
std::vector<int> vec2 = {1, 2, 3}; // 使用列表初始化
std::vector<int> vec3(5); // 创建包含5个默认初始化元素的vector
std::vector<int> vec4(5, 10); // 创建包含5个值为10的元素的vector
向vector对象中添加元素:
可以使用push_back()函数向vector对象的末尾添加元素。
std::vector<int> vec;
vec.push_back(1); // 向vector中添加元素1
vec.push_back(2); // 向vector中添加元素2
vec.push_back(3); // 向vector中添加元素3
其他vector操作:
vector对象还提供了许多其他的操作,如访问元素、插入元素、删除元素等。以下是一些示例:
std::vector<int> vec = {1, 2, 3, 4, 5};
vec.size(); // 返回vector中的元素个数
vec.empty(); // 判断vector是否为空
vec[0]; // 使用下标访问元素
vec.at(2); // 使用at()函数访问元素
vec.front(); // 返回第一个元素
vec.back(); // 返回最后一个元素
vec.insert(vec.begin() + 2, 10); // 在指定位置插入元素
vec.erase(vec.begin() + 1); // 删除指定位置的元素
迭代器介绍:
迭代器是一种用于遍历容器中元素的对象。在C++中,容器类(如string、vector等)都提供了迭代器,可以使用迭代器来访问容器中的元素。
使用迭代器:
可以使用迭代器来遍历容器中的元素,并进行相应的操作。以下是一个使用迭代器遍历vector的示例:
#include <iostream>
#include <vector>
int main() {
std::vector<int> vec = {1, 2, 3, 4, 5};
for (std::vector<int>::iterator it = vec.begin(); it != vec.end(); ++it) {
std::cout << *it << " "; // 输出元素的值
}
return 0;
}
迭代器运算:
迭代器支持一系列的运算操作,如前移、后移、比较等。以下是一些常用的迭代器运算:
std::vector<int>::iterator it = vec.begin();
++it; // 迭代器后移
--it; // 迭代器前移
it++; // 迭代器后移
it--; // 迭代器前移
it + 2; // 迭代器向后移动2个位置
it - 2; // 迭代器向前移动2个位置
it1 == it2; // 判断两个迭代器是否相等
it1 != it2; // 判断两个迭代器是否不相等
数组:
数组是一种固定大小的、连续存储的元素序列。在C++中,可以使用内置数组来存储一组相同类型的数据。
定义和初始化内置数组:
可以使用以下方式定义和初始化内置数组:
int arr1[5]; // 定义一个包含5个int类型元素的数组
int arr2[] = {1, 2, 3}; // 使用列表初始化
int arr3[5] = {1, 2, 3}; // 指定数组大小并使用列表初始化
访问数组元素:
可以使用下标运算符 [] 来访问数组中的元素,并进行相应的处理。
int arr[5] = {1, 2, 3, 4, 5};
int num1 = arr[0]; // 使用下标访问第一个元素
int num2 = arr[2]; // 使用下标访问第三个元素
arr[1] = 10; // 修改第二个元素的值
arr[3] += 5; // 对第四个元素的值进行加法操作
指针和数组:
数组名可以被解释为指向数组第一个元素的指针。可以使用指针来操作数组。
int arr[5] = {1, 2, 3, 4, 5};
int* ptr = arr; // 数组名解释为指向第一个元素的指针
*ptr; // 访问第一个元素
*(ptr + 2); // 访问第三个元素
ptr++; // 指针后移
ptr--; // 指针前移
ptr + 2; // 指针向后移动2个位置
ptr - 2; // 指针向前移动2个位置
C风格字符串:
C风格字符串是以null字符 '\0' 结尾的字符数组。可以使用字符数组来表示和操作字符串。
char str1[] = "Hello"; // 使用字符串字面值初始化字符数组
char str2[10]; // 定义一个大小为10的字符数组
strcpy(str2, str1); // 复制字符串
strcat(str2, " World"); // 连接字符串
strlen(str2); // 返回字符串的长度
strcmp(str1, str2); // 比较字符串,返回0表示相等
与旧代码的接口:
C++中的string对象和C风格字符串之间可以进行相互转换,从而与旧代码进行接口对接。
#include <iostream>
#include <string>
#include <cstring>
int main() {
std::string str = "Hello, World!";
const char* cstr = str.c_str(); // 将string转换为C风格字符串
std::string newStr(cstr); // 将C风格字符串转换为string
std::cout << newStr << std::endl;
return 0;
}
多维数组:
多维数组是由多个数组组成的数组。在C++中,可以使用多维数组来存储多维数据。
int arr[3][4]; // 定义一个包含3行4列的二维数组
int arr[3][4] = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}
};
int num = arr[1][2]; // 访问第二行第三列的元素