별도의 요소를 포함하는 벡터로 문자열을 토큰 화합니다. 다음으로이 벡터의 하위 집합에서 문자열의 발생을 계산하려고합니다. 이 20
의 모든 발생을 계산합니다벡터 서브 세트의 어커런스 횟수
cout << std::count (tokens.begin(), tokens.end(), 20);
: 나는 단순히 가지고있는 전체의 벡터를 사용할 때 guide에서 언급 한 바와 같이 이것은했다. (가이드)에서 하위 집합을 사용하는 것이 가능하다 배열을 사용
:
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' 예제에서 빈 범위를 셀 수 있고 항상 0이됩니다.) – aschepler