2013-06-12 2 views
0

별도의 요소를 포함하는 벡터로 문자열을 토큰 화합니다. 다음으로이 벡터의 하위 집합에서 문자열의 발생을 계산하려고합니다. 이 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 
+0

'tokens.end()'에 양수를 추가 할 수 없습니다. 어떤 범위를 정말로 검색하고 싶습니까? – aschepler

+0

아, 물론입니다. 그것은'tokens.begin() + end [i]'여야합니다. – PascalVKooten

+0

('start == end' 예제에서 빈 범위를 셀 수 있고 항상 0이됩니다.) – aschepler

답변

2

벡터 반복자에 정수를 추가하는 것은 단지 포인터에 정수를 추가처럼 작동 : 여기

은 작업 예를 들어 맥락이다. 그래서 당신은 예를 들어 수행 할 수 있습니다

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

는 20의 인덱스 [5, 10)와 위치에 토큰에 얼마나 많은 계산하기.

+0

예제에서 볼 수 있듯이 저도 마찬가지입니다. 왜 내가 그때 오류가 발생하는지 어떤 생각? – PascalVKooten

+0

끝 반복자에 추가 중입니다. 절대 그렇게해서는 안됩니다. 대신 하위 배열의 크기를 내가하는 것처럼 반복자에 추가하는 값에 추가하십시오. –

+0

그런 단순한 실수는 아직 한 시간 동안 저를 붙잡고 있습니다. 감사! – PascalVKooten

관련 문제