[英]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.