2011-11-22 1 views
2
#include <vector> 

int main() 
{ 
    vector <class> abc; 
} 

에서 벡터의 다른 멤버에 액세스하는 ? 나는 * abc를 통과해야합니까?어떻게 기능

+3

'class'는 C++의 키워드입니다. 유형을 지정할 수는 없습니다. –

답변

4

벡터를 수정하지 않으려면 일반적으로 const 참조로 전달하십시오.

void draw(const std::vector<T>& v) 
{ 
    for (int x = 0; x < v.size(); x++) 
    { 
     // draw v[x]; 
    } 
} 

이터레이터를 사용할 수도 있습니다 (이것은 종종 권장 됨). 즉 전체 벡터 당신은 분명 매우 비효율적이다 함수를 호출 할 때마다 복사 할 원인이 있기 때문에

void draw(const std::vector<T>& v) 
{ 
    for (std::vector<T>::const_iterator x = v.begin(); x != v.end(); ++x) 
    { 
     // draw *x; 
    } 
} 

당신이 값 (draw(std::vector<T> v))하여 통과하지 못한 이유입니다. 참고 문헌은 새로운 벡터를 생성하는 것이 아니라 기존 벡터를 참조한다는 것을 의미합니다. (C++ 11에서 여전히) 또는

for (const auto & x : vector) { draw(x); } 

: 현대 C에서

+0

'iterators'는 STL의 기본적인 접착제 일뿐입니다. –

+0

그리고 'auto'는 iterator를 더 편리하게 입력하게합니다. –

5

는 ++이 귀하의 오류를 수정하지 않고 답변을 얻을 수 있습니다 이것은에서 작동 할 수

for (auto it = vector.cbegin(), end = vector.cend(); it != end; ++it) 
{ 
    draw(*it); 
} 

C++ 98/03 ,

for (std::size_t i = 0, end = vector.size(); i != end; ++i) { draw(vector[i]); } 
+1

C++ 98/03에서'i = 0, ie = vector.size()'를 할 수 없습니까? 매 반복마다 함수를 호출하는 것이 재미 있지는 않습니다. –

+0

@ MichaelKrelin-hacker : 할 수 있습니다! :-) –

+0

오! 그래서 너를 할 수있어 ;-) (+1) –

0

std :: vector가 유형입니다. 당신은 인스턴스에 전달해야하므로 귀하의 경우 :

void draw(const std::vector<class> & v); 
0
#include <algorithm> 
#include <vector> 
#include <iostream> 

void addOne(int& value) 
{ 
    value++; 
} 

void print(int& value) 
{ 
    std::cout << value; 
} 

int main() 
{ 
    std::vector<int> myVector; 
    myVector.push_back(1); 
    myVector.push_back(2); 
    myVector.push_back(3); 
    std::for_each(myVector.begin(), myVector.end(), addOne); 
    std::for_each(myVector.begin(), myVector.end(), print); 
} 

는 출력 :

(234)에 의해 쓴

draw(abc); 

또한 함수는 프로토 타입을 가져야한다고 동의 손, 컴파일러 오류가 가능합니다.