我將字符串標記爲包含單獨元素的矢量。接下來,我想計算這個向量子集中字符串的出現次數。這工作時,我想簡單地使用與整個載體,由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);
的問題是,我想使用矢量的一個子集,而且我試過幾件事情,但他們全部不起作用:
// 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
您不能將一個正數添加到'tokens.end()'。你真的想搜索什麼樣的範圍? – aschepler
啊,是的,當然。它應該是'tokens.begin()+ end [i]'。 – PascalVKooten
(在'start == end'的例子中,你計入空範圍並且總是得到零)。 – aschepler