2011-10-02 58 views
1

我是一個初學者,剛剛遇到了C++中向量的概念。我有幾個關於它的問題
1.在C++中是否存在二維矢量的概念?如果是,那麼我該如何聲明相應的二維矩陣a [n] [m]?這裏,n和m是變量。
2.矢量如何作爲參數傳遞給函數?默認情況下,它們是按引用或按值傳遞的?
3.在C++中,數組上的向量是否有任何性能優勢?
關於在C++中的屬性向量的查詢

回答

1

在C++中沒有2-D矢量,要創建矩陣,可以使用矢量矢量。

using namespace std; 
int m, n; 
// ... 
vector<vector<int> > v(n); 
for (int y = 0; y < n; y++) 
    v[n].resize(m); 
// ... 

雖然計算庫不會這樣實現它們。

要通過引用函數傳遞向量,請使用: void function(vector &v); 省略&將導致在函數調用期間複製向量。

向量具有與C數組相同的性能,但使用起來更實用。 無需手動管理內存,矢量大小始終可以訪問。 你也有自動複製和保證值的連續性(原始數據可以訪問vector :: data()

+0

沒有更好的方式來聲明一個大小爲m * n的向量 – gibraltar

+0

向量在這種情況下,你需要使用'm * y + x'來計算(x,y)單元偏移量,而嵌套向量允許使用v [y] [x]語法... –

0

C++中的向量只是一個序列容器。所以,可以用它來保存二維數組。

  1. 使用std::vector <std::vector<int>>
  2. 這取決於目的。
  3. 不是明智的,但與數組不同,std :: vector是可增長的。
1

1 - 尺寸本身沒有真正的概念。但是你可以創建「嵌套」類型。例如:

std::vector <int> intVec; 
std::vector < std::vector <int> > doubleIntVec; 

這裏,intVec可以比一維向量,doubleIntVec雙尺寸,等等。這些類型不一定是相同的,例如,你可以做std::vector < std::vector <char> > doubleIntVec,這就是爲什麼「維度」在這裏不是合適的術語。

2 - 和其他類型一樣,沒有特殊的矢量處理。

3 - 是的,例如,如果您需要調整它們的大小,但是您可以實現相似的行爲。除此之外,其好處在於標準化,內置的內存管理,附加方法以及可在矢量上運行的各種STL算法(它是一個標準容器)。