2014-10-23 4 views
1

개인 변수가 있습니다 std::vector<some struct> 어떻게 든 반환 값을 함수에 전달할 수 있지만 "쓰기"권한이 없으므로 새 요소를 추가하면 요소를 수정할 수 없게됩니다 (예 : const std::vector<some const struct>*). 어떻게 할 수 있습니까? 유일한 아이디어는 기존 요소에 대한 상수 포인터를 사용하여 새 벡터를 만드는 것입니다. ?Std :: Vector <struct> to const std :: vector <const struct> *

+0

그냥'반환 및 the_vector을,'? 두 개의'const_iterators'를 반환하는 것이 더 관용적 일지 모르지만. – juanchopanza

+0

@juanchopanza 그 경우, u는 해당 벡터의 모든 요소를 ​​수정할 수 있습니다 – Quest

+0

정말요? 어떻게 그럴 수 있니? – juanchopanza

답변

5

당신은 const 벡터에 대한 포인터 또는 참조를 통해 벡터의 요소를 수정할 수 없습니다 다음은 안전 할 것입니다 그래서 :.

const std::vector<some_type>* get_pstuff() const { return &the_vector; } 
const std::vector<some_type>& get_rstuff() const { return the_vector; } 
한편

, 시작과 끝 벡터의에 const_iterators 반환하는 것이 더 관용적 수 있습니다 :

std::vector<some_type>::const_iterator cbegin() const { return the_vector.cbegin(); } 
std::vector<some_type>::const_iterator cend() const { return the_vector.cend(); } 
+0

벡터에서 추가하거나 제거 할 수는 없지만 각'some_type' 객체의 인스턴스를 수정할 수는 있습니다. – Lochemage

+2

@Lochemage 아니, 할 수 없다. – juanchopanza

+0

죄송합니다.'some_type'을 객체에 대한 포인터로 오해했습니다.이 경우에는 올바른 것입니다. – Lochemage

관련 문제