簡體   English   中英

C ++向量-push_back

[英]C++ vector - push_back

在C ++ Primer書的第(3)章中,有以下for循環將向量中的元素重置為零。

vector<int> ivec; //UPDATE: vector declaration
for (vector<int>::size_type ix = 0; ix ! = ivec.size(); ++ix)
ivec[ix] = 0;

for循環是否真的為元素分配了0值,還是必須使用push_back函數?

那么,以下有效嗎?

ivec[ix] = ix;

謝謝。

for循環是否真的為元素分配了0值? 還是我們必須使用push_back函數?

ivec[ix] =0更新向量中現有元素的值,而push_back函數向向量中添加新元素!

那么,以下有效嗎?
ivec [ix] = ix;

如果 ix < ivec.size()是完全有效的。

如果使用iterator而不是index會更好。 像這樣,

int ix = 0;
for(vector<int>::iterator it = ivec.begin() ; it != ivec.end(); ++it)
{ 
     *it = ix++; //or do whatever you want to do with "it" here!
}

帶有STL的iterator是慣用的。 優先於迭代器而不是索引!

是的,您可以使用方括號檢索和覆蓋向量的現有元素。 但是請注意,您不能使用方括號將新元素插入向量中,並且實際上,在向量末尾進行索引會導致未定義的行為,從而經常使程序完全崩潰。

要增大向量,可以使用push_back,插入,調整大小或分配函數。

使用數組括號,矢量對象的行為與其他任何簡單數組一樣。 push_back()將其長度增加一個元素,並將新/最后一個設置為您傳遞的值。

此for循環的目的是迭代向量的元素。 從元素x(當ix為0時)開始,直到最后一個元素(當ix為ivec.size()-1時)。

在每次迭代中,向量的當前元素均設置為9。這就是該語句

ivec[ix] = 0;

做。 推桿

ivec[ix] = ix;

在for循環中,會將向量的所有元素設置為其在向量中的位置。 也就是說,第一個元素的值為零(向量從0開始索引),第二個元素的值為1,依此類推。

是的,假設ix是有效索引,則很可能:盡管您有一個int向量,並且索引是size_type。 當然,您有時可能會故意存儲-1以顯示無效的索引,因此將unsigned轉換為signed將是適當的,但是我建議使用static_cast。

做您正在做的事情(將向量中的每個值設置為其索引)是創建其他集合的索引的一種方法。 然后,您可以根據其他集合的預測重新排列向量排序。

假設您從不溢出(如果系統為32位或更高,則不太可能發生),則轉換應能正常進行。

暫無
暫無

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

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