在深入学习了C++ STL的集合、映射、函数对象和Lambda表达式后,下面是三道代表性的练习题,旨在巩固和实践所学知识。
练习题一:使用std::map
实现一个单词计数器
目的:练习std::map
的使用,理解键值对的存储和查找。
任务:
- 编写一个程序,读取标准输入(或字符串形式的文本),并对文本中的每个单词进行计数。
- 使用
std::map
存储单词及其出现的次数。 - 输出每个单词及其计数。
示例代码框架:
#include <iostream>
#include <map>
#include <sstream>
#include <string>
int main() {
std::string text = "your text here";
std::map<std::string, int> wordCount;
std::istringstream iss(text);
std::string word;
while (iss >> word) {
++wordCount[word];
}
for (const auto& pair : wordCount) {
std::cout << pair.first << ": " << pair.second << std::endl;
}
return 0;
}
练习题二:使用std::set
去除字符串中的重复字符
目的:练习std::set
的使用,理解元素的唯一性和自动排序。
任务:
- 创建一个函数,接受一个字符串作为参数。
- 使用
std::set
去除字符串中的所有重复字符。 - 返回一个没有重复字符的字符串。
示例代码框架:
#include <iostream>
#include <set>
#include <string>
std::string removeDuplicates(const std::string& str) {
std::set<char> chars;
std::string result;
for (char c : str) {
if (chars.insert(c).second) {
result += c;
}
}
return result;
}
int main() {
std::string input = "abracadabra";
std::string noDuplicates = removeDuplicates(input);
std::cout << "Original: " << input << std::endl;
std::cout << "No duplicates: " << noDuplicates << std::endl;
return 0;
}
练习题三:使用Lambda表达式和STL算法实现自定义排序
目的:练习Lambda表达式的使用,理解如何将其与STL算法结合。
任务:
- 创建一个程序,读取一序列整数到
std::vector
中。 - 使用Lambda表达式和
std::sort
算法按自定义规则对整数进行排序。 - 输出排序后的序列。
示例代码框架:
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> numbers = {5, 2, 10, 4, 1};
std::sort(numbers.begin(), numbers.end(), [](int a, int b) {
return a % 2 == 0 && b % 2 != 0; // 自定义排序规则:先排偶数
});
for (int num : numbers) {
std::cout << num << " ";
}
std::cout << std::endl;
return 0;
}