Yineleyici kullanarak set öğesini değiştirmek istediğimde sorun yaşıyorum. Bu basit kod ne yapmak istediğimi açıklayabilir.iterator tarafından değiştir öğesi
set<int> s;
s.insert(12);
set<int>::iterator it = s.begin();
*it = 4; // error C3892: 'it' : you cannot assign to a variable that is const
Neden normal yineleyici tarafından işaret edilen değeri değiştiremiyorum, const_iterator?
Kodumda yineleyici set :: find(). Belki de belirli öğeleri setten seçip değiştirmenin daha iyi bir yolu olabilir.
+1: Her ne kadar bu sorudan vazgeçse de: neden '' '' '' '' '' '' '' 'yinelemesiz '' yineleyici '' döndürür? –
Normal bir yineleyici döndürmek kafa karıştırıcıdır, ancak şimdi en azından bu hatayı neden aldığımı anlayın. Çok teşekkürler. – Scypi
@OliCharlesworth, Scypi: Bu biraz daha zorlayıcı, yineleyici 'const_iterator' değil, bir * değişebilir * yineleyici. Bu, değişmez * olanı indeksleyebilen "Anahtar" dır. §23.2.4p5 * "[...] İlişkili bir kapsayıcıdaki anahtarlar değişmezdir." * Yapmazlar neden başlangıçta değillerse() 've sonu (const_iterator'dan ziyade her zaman) tahminim şu ki Konteyner arayüzlerini mümkün olduğunca muntazam bir şekilde tutmak için yapılır. Özellikle §23.2.4p6, bu durumda "yineleyici" ve "const_iterator" * öğelerinin aynı olabileceğini ve ODR ihlallerini önlemek için her zaman "const_iterator" kullanılmasını önerir. –