我能確定一個std::vector(或者,一般來說,任何標準容器)包含物件而不是指向物件的指標,無論物件的類有多復雜,如果它具有恒定的大小?
例如:在這個簡單的情況下:
struct MyStruct { int a, b; };
std::vector<MyStruct> vs;
得到的矢量布局是:
[ ..., a1, b1, a2, b2, a3, b3, ... ]
標準是否保證在這種(或更復雜的)情況下也會發生同樣的情況,其中結構的大小應該是恒定的:
struct MyStruct2 { float f[10]; };
std::vector<MyStruct2> vs2;
有布局:
[ ..., f1[0], f1[1], ..., f1[9], f2[0], f2[1], ..., f2[9], ... ]
代替:
[ ..., *pf1, *pf2, ... ]
pf1 = [ f1[0], f1[1], ..., f1[9] ]
pf2 = [ f2[0], f2[1], ..., f2[9] ]
uj5u.com熱心網友回復:
由于 C 11 及以后(C 03幾乎可以保證),astd::vector中的資料是連續的,沒有間隙。
特別是如果您有一個指向 中元素的指標std::vector,則可以使用指標演算法訪問所有其他元素。
當然,指標算術sizeof以您的struct. 并且struct本身可能包含填充。b給定指向a結構中的an 的指標,嘗試到達 a 的行為是未定義的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/342876.html
下一篇:C多重間接
