我知道可以覆蓋C++ 中的索引操作[],並使用類內部數據(例如數組)處理。 是否可以覆蓋[] []並像兩個維數組一樣工作?覆蓋索引操作
覆蓋索引操作
回答
是的,這是可能的(和std :: vector是這樣的類的一個例子)。
你應該在你的類或結構中重載operator []。
如果您使用的正整數來索引數據可能簽名將是:
RETURN_TYPE operator[] (size_type n);
UPD:如果希望具有非負整數作爲密鑰可以使用矢量的矢量二維數據結構:
std::vector<std::vector<YOUR_TYPE>> vector_name;
比方說,你有一個數組arr
,每當你想接取arr[x][y]
用於爲例它的(arr[x])[y]
等價所以首先arr[x]
的評估(我們將其命名爲a
),然後a[y]
評價,所以你必須重載只是[]
運營商。
但是(arr [x]) - 必須返回一維數組和一個[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. 覆蓋Rails引擎控制器操作
- 3. XCOPY覆蓋操作?
- 4. SSRS 2005年覆蓋索引
- 5. 複合和覆蓋索引
- 6. 覆蓋索引列activeadmin
- 7. 覆蓋索引與ORDER BY
- 8. fosuserbundle覆蓋登錄操作
- 9. 如何覆蓋self.navigationItem.backBarButtonItem操作?
- 10. admin:覆蓋「保存」操作
- 11. Android操作欄覆蓋
- 12. Android操作欄,「覆蓋」
- 13. Colorbox覆蓋關閉操作
- 14. Woocommerce覆蓋插件操作
- 15. Postgres使用主鍵索引作爲覆蓋索引
- 16. 索引操作
- 17. MongoDB可能掃描文件以查找可能被索引覆蓋的操作
- 18. SQL索引更新與覆蓋柱
- 19. MKMapView覆蓋在固定索引
- 20. WordPress的 - 覆蓋CSS索引類?
- 21. EF代碼優先:CreateIndex - 覆蓋索引
- 22. EF/CD如何覆蓋索引屬性?
- 23. 使用覆蓋索引的說明
- 24. mongodb的索引覆蓋查詢
- 25. Mysql的覆蓋索引優化
- 26. 優化覆蓋索引的使用
- 27. 問題與覆蓋和z-索引
- 28. Lucene:在索引時覆蓋詞頻率
- 29. 主動管理覆蓋索引視圖
- 30. UITableView覆蓋當部分索引觸及
你有一個例子如何做到這一點。但std :: vector不是二維 – user1913557
看我的更新 –