C++에서 인덱스 작업 []을 덮어 쓰고 배열과 같은 클래스 내부 데이터로 작업 할 수 있다는 것을 알고 있습니다. [] []를 덮어 쓰고 두 개의 디멘션 배열과 같이 작동 할 수 있습니까?인덱스 작업 덮어 쓰기
답변
예, 가능합니다 (std :: vector는 이러한 클래스의 예입니다).
클래스 또는 구조에서 연산자 []을 (를) 오버로드해야합니다.
RETURN_TYPE operator[] (size_type n);
UPD :
이 경우에는 가능한 서명 것 인덱스 데이터 양의 정수를 사용하면 키와 음이 아닌 정수가 벡터의 벡터를 사용하여 2 차원 데이터 구조체를 원한다면 :
std::vector<std::vector<YOUR_TYPE>> vector_name;
예, 실제로 가능합니다. 일반적으로, 오버로드 []는 행 유형 객체에 대한 참조를 반환하고 해당 행 유형 객체에 대한 []를 오버로드하여 스칼라에 대한 참조를 생성합니다.
[x]
과 *(... + x)
의 등가성을 유지하려면 포인터 역 참조 오버로드도 고려해야합니다.
의 당신이 exemple에 대한 arr[x][y]
를 ACESS 할 때마다 방금 []
과부하 그래서 그렇게 먼저 arr[x]
의 (arr[x])[y]
의 등가를 가지고 (의이 a
이름을하자) 평가 후 a[y]
이 평가 배열 arr
있다고 가정 해 봅시다 운영자.
하지만 (arr [x]) - 1 차원 배열을 반환해야하고 [y] - 값을 사용하면 한 연산자에 두 가지 다른 반환 유형을 오버로드하는 방법은 무엇입니까? – user1913557
@ user1913557 배열? Nop. 포인터를 반환합니다. '[]'연산자의 왼쪽은 항상 포인터입니다. –
달성하려면 operator[]
에 오버로드하여 operator[]
이있는 개체를 반환해야합니다. 예 :
class Proxy {
std::vector<int>::iterator it;
//constructor;
int operator[] (size_t pos) {
return *(it + pos);
}
}
class MyMatrix {
std::vector<std::vector<int>> v;
Proxy operator[] (size_t pos) {
return Proxy(v[pos].begin());
}
}
경계 검사를 수행하지 않고 단일 치수 구현을 사용하는 경우 포인터는 적절한 'Proxy'입니다. int * operator [] (int i) {return & v [i * columns]; }'. 비슷하게 구현시,'std :: vector
- 1. 인덱스 열 덮어 쓰기 activeadmin
- 2. Internet Explorer 7 z- 인덱스 덮어 쓰기
- 3. Colorbox 닫기 작업 덮어 쓰기
- 4. 예약 된 작업 덮어 쓰기
- 5. MongoDB 고유 인덱스 덮어 쓰기 금지
- 6. Lucene : 인덱스 시간에 용어 빈도 덮어 쓰기
- 7. BigQuery 덮어 쓰기 작업 중 스트리밍 삽입물
- 8. MVC 3 사후 작업 방법 덮어 쓰기
- 9. Starteam/CruiseControl을 사용하여 작업 폴더 덮어 쓰기
- 10. .NET 클래스에서 덮어 쓰기 덮어 쓰기
- 11. Bash의 덮어 쓰기/덮어 쓰기 기능
- 12. C#의 이미지 덮어 쓰기 덮어 쓰기
- 13. 함수 내에서 함수 덮어 쓰기/덮어 쓰기
- 14. 덮어 쓰기
- 15. 스프링 덮어 쓰기 컨트롤러
- 16. 배경색 덮어 쓰기
- 17. 루프 쓰기 시도, 덮어 쓰기
- 18. 소스 파일 덮어 쓰기
- 19. YII에서 현재 테마 덮어 쓰기
- 20. 변수 이름 덮어 쓰기 방지
- 21. active_admin gem에서 html 덮어 쓰기
- 22. 부트 스트랩 표 덮어 쓰기 행 배경색 덮어 쓰기
- 23. JavaScript 이벤트에서 e.target 바꾸기/덮어 쓰기/덮어 쓰기
- 24. 덮어 쓰기 된 변수에서 덮어 쓰기 된 변수에 어떻게 액세스해야합니까?
- 25. HTMLNode 인터페이스 덮어 쓰기
- 26. 파일 업로드시 덮어 쓰기
- 27. WPF - 덮어 쓰기 이벤트
- 28. ChartPanel로 paintComponent 덮어 쓰기
- 29. Django에서 양식 덮어 쓰기
- 30. mvc.Controller.template() 덮어 쓰기
수행 방법에 대한 예제가 있습니까? 하지만 std :: vector는 2 차원이 아닙니다 – user1913557
위 업데이트로보기 –