3. 数组、字符串和容器

数组基础

1. 固定大小数组

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
// 声明和初始化
int numbers[5] = {1, 2, 3, 4, 5};  // 完整初始化
int partial[5] = {1, 2};           // 部分初始化,其余为0
int inferred[] = {1, 2, 3};        // 自动推导大小

// 多维数组
int matrix[3][3] = {
    {1, 2, 3},
    {4, 5, 6},
    {7, 8, 9}
};

// 访问元素
int first = numbers[0];            // 下标访问
numbers[4] = 10;                   // 修改元素

// 数组大小
size_t size = sizeof(numbers) / sizeof(numbers[0]);

2. 动态数组

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
// 使用new分配
int* dynamic = new int[5];
dynamic[0] = 1;
// ... 使用数组
delete[] dynamic;                  // 必须释放内存

// C++11 std::array
#include <array>
std::array<int, 5> arr = {1, 2, 3, 4, 5};
std::cout << arr.size() << "\n";   // 5
std::cout << arr.front() << "\n";  // 第一个元素
std::cout << arr.back() << "\n";   // 最后一个元素

字符串处理

1. C风格字符串

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
// 字符数组
char str[] = "Hello";              // 包含结尾的'\0'
const char* ptr = "World";         // 字符串字面量

// 常用函数
#include <cstring>
size_t len = strlen(str);          // 字符串长度
char dest[10];
strcpy(dest, str);                 // 字符串复制
strcat(dest, " World");           // 字符串拼接
int cmp = strcmp(str, ptr);        // 字符串比较

2. std::string

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
#include <string>

// 创建和初始化
std::string s1 = "Hello";
std::string s2("World");
std::string s3(5, '*');           // *****

// 字符串操作
s1 += " " + s2;                   // 字符串拼接
std::cout << s1.length() << "\n"; // 字符串长度
std::cout << s1.empty() << "\n";  // 是否为空

// 子字符串和查找
std::string sub = s1.substr(0, 5); // 提取子串
size_t pos = s1.find("World");     // 查找子串
s1.replace(0, 5, "Hi");           // 替换子串

// 遍历字符串
for (char c : s1) {
    std::cout << c << " ";
}

STL容器

1. 顺序容器

vector(动态数组)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
#include <vector>

// 创建和初始化
std::vector<int> vec = {1, 2, 3};
std::vector<std::string> names(3, "unknown");

// 添加和删除元素
vec.push_back(4);                  // 末尾添加
vec.pop_back();                    // 末尾删除
vec.insert(vec.begin(), 0);        // 插入元素
vec.erase(vec.begin());           // 删除元素

// 访问元素
std::cout << vec[0] << "\n";      // 下标访问
std::cout << vec.at(1) << "\n";   // 带边界检查的访问
std::cout << vec.front() << "\n"; // 第一个元素
std::cout << vec.back() << "\n";  // 最后一个元素

57.12k 字
43篇文章