[英]Using std::begin(collection) vs collection.begin() in C++
[英]Iterators in C++ begin/end vs a:collection
有人可以啟發我了解兩者之間的區別嗎
for( auto a : world )
和
for( auto a=world.begin() ; a != world.end(); a++ )
前者是否制作了向量/數組 [world] 的(深層)副本? 如果在循環內更改a
,則更改似乎在前者中丟失而在后者中保留。
蒂亞·理查德
不,第一循環不會做的深層副本world
作為一個整體,但在每次迭代,從一個項目world
被復制到a
。
如果你想改變a
,讓他們影響到原來的集合,通常要聲明a
作為參考:
std::vector<int> world;
// add 2 to each item in `world`:
for( auto &a : world )
a += 2;
在這種情況下, a
是對world
項目的引用,因此添加到它會修改world
的項目。
for( auto a : world ) { ...something... }
大致相當於
for( auto it = world.begin(); it != world.end(); ++it ) {
auto a = *it;
{ ...something... } }
這樣a
在這里是從iterator中的值復制,並改變也不會影響它是從復制的集合。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.