2012-11-05 2 views

답변

2

반복자를 공급함으로써,하지 dereferncing에서 사용하는 좀 더 간결하게 만들 수 있습니다 그것은 연산자 []에 있습니다. 귀하의 코드는 다음과 같아야합니다 :

void print_courses(){ 
    vector<string>::iterator it; 
    for(it=courses_.begin();it < courses_.end(); it++) 
      cout << *it << " "; 
} 

operator []는 벡터를 숫자로 색인화하는 데 사용됩니다.

3

:

no match for 'operator[]' in '((Students*)this)->Students::courses_[it]' 

이 내 코드입니다 완전히 틀렸다.

cout << this->courses_[it] << " "; 

에 : 라인 변경

cout << *it << " "; 

를 또는로 루프 전체를 변경 : 벡터의 요소에

for(vector<string>::size_type i=0; i<courses_.size(); ++i) { 
    cout << this->courses_[i] << " "; 
} 
1

는 다음과 같은 의미입니까? : 당신이 말하고 싶은

#include <vector> 
#include <string> 
#include <iostream> 
using namespace std; 
#include "../include/Courses.h" 
class Courses; 

class Students { 
private: 
string name_; 
int id_; 

public: 
vector<string> courses_; 
void print_courses(){ 
    vector<string>::iterator it; 
    for(it=courses_.begin();it < courses_.end(); it++) 
      cout << this->courses_[it] << " "; 
} 
1

이를 : cout << *it << " ";

4

반복자 포인트, 당신은하지 않습니다 그것을 벡터에 색인하기 위해 사용하십시오. 당신이 범위를 기반으로 for 루프를 지원하는 C++ (11) 컴파일러가있는 경우

for(it=courses_.begin();it < courses_.end(); it++) { 
    cout << *it << " "; 
} 

는 루프

for(auto const& c : courses) { 
    cout << c << " "; 
} 
3

"it"은 인덱스가 아니라 반복자입니다. 이 같은 지표를 통해

cout << *it <<" " ; 

아니면 루프 - - 당신의 라인을 변경해야

for(int it=0; courses_.size(); ++it) 
     cout << this->courses_[it] << " "; 

당신은 두 가지 방식을 혼합 할 수 없습니다

관련 문제