c++ - 计算 vector 子集中的出现次数

标签 c++

我将一个字符串标记为一个包含单独元素的 vector 。接下来,我想计算该 vector 子集中某个字符串的出现次数。正如 guide 所提到的,当我想简单地使用整个 vector 时,这就起作用了。 :

cout << std::count (tokens.begin(), tokens.end(), 20);

这将统计 20 的所有出现次数。

使用数组可以使用子集(来自指南):

int myints[] = {10,20,30,30,20,10,10,20};   // 8 elements
int mycount = std::count (myints, myints+8, 20);

问题是我想使用 vector 的一个子集,我尝试了几种方法但它们都不起作用:

// Note: Here I count "NaN", which does not change the story.
std::count (tokens.begin(start[i]), tokens.end(end[i]), "NaN")        
std::count (tokens.begin() + start[i], tokens.end() + end[i], "NaN")
std::count (tokens + start[i], tokens + end[i], "NaN")

如何计算 vector 子集中出现的次数?

这是一个工作示例的上下文:

#include <iostream>
#include <string>
#include <sstream>
#include <algorithm>
#include <iterator>

int main() {
    using namespace std;
    string line = "1 1 1 1 1 NaN NaN NaN";
    std::vector<int> start = {1,2,3,4};
    std::vector<int> end = {1,2,3,4};    
    istringstream iss(line);
    vector<string> tokens;
    copy(istream_iterator<string>(iss),
         istream_iterator<string>(),
         back_inserter<vector<string> >(tokens));
    for (int i = 0; i < 3; i++)
     {
       cout<<std::count(tokens.begin() + start[i], tokens.end() + end[i], "NaN");
     }
}

Error: Segmentation fault

最佳答案

将整数添加到 vector 迭代器就像将整数添加到指针一样。所以你可以这样做:

cout << std::count (tokens.begin() + 5, tokens.begin() + 10, 20);

计算索引为[5, 10)的标记中有多少个20-s。

关于c++ - 计算 vector 子集中的出现次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17067389/

相关文章:

c++ - MFC 中的 GridView

c++ - 我的项目中不断出现 3 个 LNK2019 错误,但不知道为什么

c++ - 如何显示我的队列和堆栈?

c++ - 为什么 floyd warshall 只使用一个距离矩阵?

c++ - 使用 boost::join 合并多个数组

c++ - 如何在递归模板函数中首次调用时执行函数?

c++ - 空的括号初始化列表发出有关缺少字段初始化器的警告

c++ - 如何检测QWidget的关闭按钮被按下?

c++ - 为什么在虚拟继承中调用默认构造函数?

c++ - Qt 中的 SFML 2.1 小部件