簡體   English   中英

C++ 中的迭代器開始/結束 vs a:collection

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

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