我将字符串标记为包含单独元素的向量。接下来,我想计算此向量子集中字符串的出现次数。当我想简单地使用整个向量时,这很有用,如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
答案 0 :(得分:2)
向向量迭代器添加整数就像向指针添加整数一样。所以你可以这样做:
cout << std::count (tokens.begin() + 5, tokens.begin() + 10, 20);
计算索引[5, 10)
位置的令牌中有多少20-s。