C++学习之阶段性练习题(C++ STL的集合、映射、函数对象和Lambda表达式)

在深入学习了C++ STL的集合、映射、函数对象和Lambda表达式后,下面是三道代表性的练习题,旨在巩固和实践所学知识。

练习题一:使用std::map实现一个单词计数器

目的:练习std::map的使用,理解键值对的存储和查找。

任务

  1. 编写一个程序,读取标准输入(或字符串形式的文本),并对文本中的每个单词进行计数。
  2. 使用std::map存储单词及其出现的次数。
  3. 输出每个单词及其计数。

示例代码框架

#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的使用,理解元素的唯一性和自动排序。

任务

  1. 创建一个函数,接受一个字符串作为参数。
  2. 使用std::set去除字符串中的所有重复字符。
  3. 返回一个没有重复字符的字符串。

示例代码框架

#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算法结合。

任务

  1. 创建一个程序,读取一序列整数到std::vector中。
  2. 使用Lambda表达式和std::sort算法按自定义规则对整数进行排序。
  3. 输出排序后的序列。

示例代码框架

#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;
}
上一篇:IDEA 算法要点和难点,实际案例应用,代码实例和解析-明文加密:


下一篇:深入图像分类:使用美国手语数据集训练定制化神经网络-结语