가정하자 I가내부 색인 참조?
난 "외부"이고, j는 "내부"인a[i][j] = stuff;
로 인덱싱
vector<vector<int> > a;
... 다음에 "외부에 대한 참조를 생성
"벡터는 간단하다의 I에 대한 참조를 만들 수있는 좋은 방법은vector<int>& b = a[x];
있는가 너?
vector<int>& b = a[<don't know>][x];
감사합니다.
가정하자 I가내부 색인 참조?
난 "외부"이고, j는 "내부"인a[i][j] = stuff;
로 인덱싱
vector<vector<int> > a;
... 다음에 "외부에 대한 참조를 생성
"벡터는 간단하다의 I에 대한 참조를 만들 수있는 좋은 방법은vector<int>& b = a[x];
있는가 너?
vector<int>& b = a[<don't know>][x];
감사합니다.
불행하게도, 아니, 컴파일러는
a.operator[] (/* ... don't know ... */).operator[] (x);
operator []
에 대한 첫 번째 호출은 실제로 vector
을 다시 손을 경우에만 의미가 같은이 치료를하기 때문에 그런 참조를 만드는 직접적인 방법은 없습니다.
그러나 행동을 구체적으로 처리하는 새 클래스를 도입하여이 동작을 속일 수 있습니다. 이 클래스에 두 번째 인덱스를 저장하고 첫 번째 인덱스가 주어진 경우 vector
에있는 실제 값을 조회하는 operator[]
함수를 제공하는 것이 아이디어입니다. 여기에 하나의 예입니다 :
class IndexReverser { // Or, your favorite name
public:
IndexReverser(vector< vector<int> >& v, size_t index);
int& operator[] (size_t firstIndex);
private:
vector< vector<int> >& realVector;
const size_t secondIndex;
};
IndexReverser::IndexReverser(vector< vector<int> >&v,
size_t index) : realVector(v), secondIndex(index) {
// Handled in initialization list
}
int& IndexReverser::operator[] (size_t firstIndex) {
return realVector[firstIndex][secondIndex];
}
그런 쓸 수
, 예를 들어,이 :
IndexReverser ir(a, j);
ir[i] = 137;
당신은 const
벡터를 처리하기 위해 트윈 클래스를 제공해야 할 수도 있습니다, 그리고 아마도 전체 구조를 매개 변수화 할 것 저장되는 요소의 유형. 나는 이것이 당신이 찾고있는 것이라는 것이 확실하지 않지만, 원칙적으로 당신이 원하는 행동을 취할 수 있음을 보여줍니다.
감사합니다. 내 질문에 대한 답변입니다. IndexReverser 클래스의 templatized 버전을 작성합니다. – Keith
이 라인 :
vector<int>& b = a[x];
는 외측 벡터를 참조하지만, 벡터 내 오히려 아니다. 또한 가능한 많은 내부 벡터가 있음에 유의하십시오.
여기에 (일반적으로는 무의미하지만) 외부 벡터에 대한 참조를 얻는 방법은 다음과 같습니다
vector<int> &inner = a[x];
:
는
vector<vector<int> > &outer = a;
얻기 내부 벡터 중 하나에 대한 참조는 다음과 같이 보입니다
나는 그 질문을 이해하지 못한다. 'a'는 외부 벡터이므로'a [x]'는 내부 벡터 중 하나에 접근합니다 (벡터 벡터를 정의 했으므로 내부 벡터는 하나가 아닙니다). 한 단계 아래로 내려 가면 개별 정수가됩니다. –
질문이 혼란 스럽습니다. int의 참조를 벡터에 어떻게 만들 수 있습니까? –