当然,下面我将给出一个使用STL(Standard Template Library,标准模板库)中的std::vector
容器来解决实际问题的示例。这个问题是:统计一个字符串中每个字符出现的次数,并打印结果。
在这个示例中,我们将使用std::vector
来存储字符及其对应的出现次数。但是,由于std::vector
本身不直接支持键值对(即字符和它的计数),我们将使用一个小技巧:使用std::pair<char, int>
作为std::vector
的元素,其中char
是字符,int
是该字符出现的次数。不过,更常见和更合适的方法是使用std::map<char, int>
或std::unordered_map<char, int>
,因为它们天生就是为了处理这种键值对映射而设计的。但在这里,为了展示std::vector
的用法,我们将采用std::pair
的方式。
不过,为了简化代码和更贴近实际使用场景,我将使用std::map
来展示这个解决方案,并在最后简要说明如何使用std::vector
(尽管不是最优选择)。
使用std::map
的解决方案
cpp复制代码
#include <iostream> | |
#include <map> | |
#include <string> | |
int main() { | |
std::string input = "hello world!"; | |
std::map<char, int> charCounts; | |
// 遍历字符串,统计每个字符的出现次数 | |
for (char c : input) { | |
// 忽略非字母字符(可选) | |
if (isalpha(c)) { | |
charCounts[c]++; | |
} | |
} | |
// 打印结果 | |
for (const auto& pair : charCounts) { | |
std::cout << pair.first << ": " << pair.second << std::endl; | |
} | |
return 0; | |
} |
使用std::vector
和std::pair
的简化说明(不推荐)
虽然不推荐,但如果你坚持要使用std::vector
和std::pair
来完成这个任务,你可以这样做:
- 遍历字符串,使用
std::find_if
(或手动遍历)来检查std::vector
中是否已存在该字符的计数。 - 如果不存在,则向
std::vector
中添加一个新的std::pair<char, int>
。 - 如果存在,则更新该
pair
的int
部分。
然而,这种方法效率很低,因为每次查找和更新都可能需要遍历整个std::vector
。这正是std::map
和std::unordered_map
被设计出来的原因,它们内部有更高效的数据结构来处理这类问题。
综上所述,对于统计字符出现次数这类问题,推荐使用std::map
或std::unordered_map
。