簡體   English   中英

std ::數組的向量

[英]std::vector of an array

以下聲明通過編譯檢查:

int arr[3];
vector<int[3]> vec;  // ok !!

嘗試將vec實際用作時,

vec.push_back(arr);

它導致許多錯誤,例如:

/usr/include/c++/4.6/ext/new_allocator.h:108:9: error: ISO C++ forbids initialization in array new [-fpermissive]
/usr/include/c++/4.6/bits/vector.tcc:314:4: error: invalid array assignment 
/usr/include/c++/4.6/ext/new_allocator.h:118:30: error: request for member ‘~int [3]’ in ‘* __p’, which is of non-class type ‘int [3]’

另外, vec也不將int* push_back()

這里到底出了什么問題? C ++ 11中是否解決了此類問題?

標准庫容器的基本要求是,元素應為Copy可構造可分配的

數組不可分配,因此會出現錯誤,您不能將它們用作標准庫容器元素。

參考:

C ++ 03 Standard:23.1容器要求[lib.container.requirements]

第3段:

存儲在這些組件中的對象的類型必須滿足CopyConstructible類型(20.1.3)的要求以及Assignable類型的其他要求

您不能將數組存儲在容器中,因為它們既不可分配也不可復制,這是與標准庫容器一起使用的所有對象的要求。

僅當您執行push_back()時才嘗試使用賦值運算符,這就是為什么代碼不使用它即可編譯的原因

與其他容器一樣, vector s也無法存儲數組,原因與您無法將數組分配給另一個數組的原因相同。 您有兩種選擇:

  • 顯而易見的是使用std::vector< std::vector<int> >
  • 如果您想要更多的C ++ 11解決方案,可能會發現std::arraystd::vector更好。 然后,您將得到vec類型為std::vector< std::array<int, 3> >

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM