基于C++ STL的string
类、动态数组std::vector
、以及集合类(如std::set
和std::map
)的学习,以下是三道代表性的练习题,旨在帮助初学者加深对这些概念的理解和应用。
练习题一:字符串处理
目的:练习使用std::string
类的成员函数进行字符串操作。
任务:
- 创建一个
std::string
对象,存储一段文本。 - 使用
std::string
的成员函数,完成以下操作:- 计算字符串长度。
- 将字符串的第一个字符改为大写。
- 找到子字符串"the"在原始字符串中的位置。
- 替换字符串中的所有"the"为"a"。
示例代码:
#include <iostream>
#include <string>
int main() {
std::string text = "the quick brown fox jumps over the lazy dog";
// 计算字符串长度
std::cout << "Length of text: " << text.length() << std::endl;
// 将第一个字符改为大写
text[0] = toupper(text[0]);
std::cout << "Text after capitalizing first character: " << text << std::endl;
// 查找子字符串"the"的位置
size_t pos = text.find("the");
std::cout << "Position of 'the': " << pos << std::endl;
// 替换所有"the"为"a"
text.replace(text.begin(), text.end(), "the", "a");
std::cout << "Text after replacing 'the' with 'a': " << text << std::endl;
return 0;
}
练习题二:动态数组操作
目的:练习使用std::vector
进行动态数组操作。
任务:
- 创建一个整型
std::vector
对象,并初始化为{1, 2, 3, 4, 5}。 - 在索引2的位置插入数字6。
- 删除索引为1的元素。
- 反转整个
vector
。 - 使用
std::for_each
算法打印vector
中的所有元素。
示例代码:
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> vec = {1, 2, 3, 4, 5};
// 在索引2的位置插入数字6
vec.insert(vec.begin() + 2, 6);
// 删除索引为1的元素
vec.erase(vec.begin() + 1);
// 反转整个vector
std::reverse(vec.begin(), vec.end());
// 使用std::for_each打印所有元素
std::for_each(vec.begin(), vec.end(), [](int num) {
std::cout << num << " ";
});
std::cout << std::endl;
return 0;
}
练习题三:映射和多重映射
目的:练习使用std::map
和std::multimap
进行映射操作。
任务:
- 创建一个
std::map
对象,存储员工的ID和姓名。 - 向
std::map
中添加几条记录。 - 查找特定ID的员工姓名。
- 修改一个员工的姓名。
- 创建一个
std::multimap
对象,存储单词与其出现次数的映射。
示例代码:
#include <iostream>
#include <map>
#include <multimap>
#include <string>
int main() {
// 员工ID和姓名的map
std::map<int, std::string> employees;
employees[101] = "John";
employees[102] = "Jane";
employees[103] = "Jim";
// 查找特定ID的员工姓名
auto it = employees.find(102);
if (it != employees.end()) {
std::cout << "Employee 102 is " << it->second << std::endl;
}
// 修改员工姓名
employees[102] = "Alex";
// 单词与其出现次数的multimap
std::multimap<std::string, int> wordCount;
wordCount.insert({"the", 2});
wordCount.insert({"quick", 1});
wordCount.insert({"the", 1}); // multimap允许键重复
// 打印multimap中的所有键值对
for (const auto& pair : wordCount) {
std::cout << pair.first << " appears " << pair.second << " times" << std::endl;
}
return 0;
}