计算向量子集中的出现次数

时间:2013-06-12 13:55:14

标签: c++

我将字符串标记为包含单独元素的向量。接下来,我想计算此向量子集中字符串的出现次数。当我想简单地使用整个向量时,这很有用,如guide

所述
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")

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

以下是工作示例的上下文:

#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

1 个答案:

答案 0 :(得分:2)

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

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

计算索引[5, 10)位置的令牌中有多少20-s。