我正在研究一個OpenGL/C++程序,我需要將座標存儲在我的窗口中,並將它們繪製在窗口中。但由於繪製點的數量是未定義的,我無法修正數組的大小。是否可以動態分配空間給數組?我可以使用任何其他數據結構來完成相同的任務嗎?動態分配數組
Q
動態分配數組
1
A
回答
6
是的,請改用std::vector
。
結合push_back
您可以動態增加元素的數量。
std::vector<Coordinate> coordinates;
coordinates.push_back(Coordinate(0,0));
coordinates.push_back(Coordinate(1,1));
,你會與一個陣列可以訪問相同的元素:
coordinates[0], coordinates[1]...
0
如所建議的,一個std::vector
是一個很好的選擇,這容器可確保鄰接的存儲器,通過它,這將是有用作爲座標緩衝區:
std::vector<Coordinate> coordinates;
coordinates.push_back(Coordinate(0,0));
coordinates.push_back(Coordinate(1,1));
// ... add more coordinates...
RenderBuffer(coordinates.data());
只要內存適合緩衝區格式,當然。
但是,由於使用連續內存的事實,由於內存塊的重新分配,插入方法可能很昂貴;如果這可能是你能擺脫它的問題預留尺寸一次,如果你知道內存的最大/最小requeriments:
// Create 100 instances of Coordinate and fill all instances with Coordinate(0, 0)
std::vector<Coordinate> coordinates(100, Coordinate(0, 0));
coordinates[0] = Coordinate(0,0);
coordinates[1] = Coordinate(1,1);
// ... add more coordinates...
RenderBuffer(coordinates.data());
但是,如果你這樣做,有沒有使用數組的區別:
// Create 100 instances of Coordinate and fill all instances with Coordinate(0, 0)
Coordinate[100];
coordinates[0] = Coordinate(0,0);
coordinates[1] = Coordinate(1,1);
// ... add more coordinates...
RenderBuffer(coordinates);
有一個例外,該陣列不能如果它需要改變它的尺寸,但std::vector
可以調整大小:
// Create 100 instances of Coordinate and fill all instances with Coordinate(0, 0)
std::vector<Coordinate> coordinates(100, Coordinate(0, 0));
coordinates[0] = Coordinate(0,0);
coordinates[1] = Coordinate(1,1);
// ... add lots of lots of lots of coordinates...
// Damn! We need more Coordinates, let's add more without worrying about resizing:
coordinates.push_back(Coordinate(0,0));
coordinates.push_back(Coordinate(1,1));
RenderBuffer(coordinates.data());
如果不需要連續內存,您必須考慮使用其他容器,如std::list
,插入方法與std::list<>::push_back
相同,但這種容器的插入完全不昂貴(至少不會像矢量那樣昂貴)。
您也可以使用方法std::vector<>::resize
調整一次大小,而不是調整某些std::vector<>::push_back
調用的大小。
相關問題
- 1. 動態分配3D數組
- 2. 動態分配數組
- 3. 動態數組分配C++
- 4. ifstream動態分配數組
- 5. 無法分配整數動態分配的二維數組
- 6. 動態分配結構數組
- 7. 錯誤到動態分配的數組
- 8. 動態分配指針數組
- 9. UPC分配動態數組和排序
- 10. 動態分配字符串數組
- 11. Fortran90中的動態數組分配
- 12. 創建動態分配的數組
- 13. 動態內存分配 - 二維數組
- 14. 將值分配給動態數組
- 15. 結構內動態分配數組
- 16. 結構數組的動態分配
- 17. Python動態數組分配,Matlab風格
- 18. QImage數組的動態分配
- 19. int數組的動態內存分配
- 20. 多維動態數組分配
- 21. 動態分配的數組結構
- 22. 動態分配對象2d數組lua
- 23. 動態數組分配在C++問題
- 24. 如何動態分配結構數組?
- 25. 動態分配數組解釋
- 26. 排序動態分配數組
- 27. 二維數組的動態分配
- 28. 動態分配二維數組
- 29. 動態分配2維數組
- 30. 迭代動態分配的數組
非常感謝! – parth
如果連續內存不是您的需求,也可以考慮使用'std :: deque',因爲它在空間不足時不必重新分配所有內存。 –