| 特性 | vector<T> arr[MAX] | T arr[MAX][MAX2] |
|---|---|---|
| 記憶體分佈 | 每個 vector 獨立配置堆疊記憶體,元素在堆上 | 連續塊狀記憶體(堆疊或靜態區) |
| 大小彈性 | 每行可動態增減(push_back/resize) | 編譯期固定,不可變 |
| 執行緒安全 | 非執行緒安全(標準 vector 無鎖) | 非執行緒安全(需外部同步) |
| 存取速度 | 雙重間接存取(指標→堆),稍慢 | 單一計算位移,最快 |
| 記憶體碎片 | 頻繁擴容易產生碎片 | 無碎片 |
原回答稱「vector 是執行緒安全」錯誤。C++ 標準容器(含 vector、map 等)均不保證執行緒安全,僅保證「不同容器實例可並發讀寫、同一實例並發讀安全」。寫入操作需外部加鎖(mutex、shared_mutex)或使用 TBB/Intel oneAPI 等並發容器。
T arr[R][C] 或 std::array<std::array<T, C>, R>。vector<vector<T>> 或 vector<T> arr[MAX](外層固定、內層動態)。std::shared_mutex 保護 vector,或改用 tbb::concurrent_vector。int a[505][505] 最快、最省記憶體、無配置開銷。const int MAX_N = 1000;
vector graph[MAX_N]; // 圖的鄰接表,每點度數不同
void addEdge(int u, int v) {
graph[u].push_back(v);
graph[v].push_back(u); // 無向圖
}
// 遍歷
for (int v : graph[u]) { /* ... */ }