sadece o aralığını kapsayan yineleyicinızı almak zorunda sadece ilk yarısında çalışmak için:
Üstelik döngü yazabilir. Genellikle insanlar bütün bir kap ile çalışmak istiyoruz ve bu yüzden uç işlevlerini başlayacak ve kullanımı, ama bu sadece yol değil: Giriş yineleyiciler ya da daha iyi çalışır
auto begin = std::begin(v);
auto middle = std::begin(v) + v.size()/2; // works for random access iterators
auto middle = begin;
std::advance(middle, v.size()/2);
avans ama giriş Yineleyicilerin için de biri değil hangi Diğerleri, gelişmiş iletilen öğelere artık erişilemez.
auto middle = std::next(begin, v.size()/2); // C++11. works for forward iterators
Ve bunlar, farklı yineleyici türlerinde gerçekleştirebileceğiniz kullanılabilir işlemlerden yalnızca birkaçı. Ben öneriyoruz En iyi yöntem olarak
std::accumulate(std::begin(v), std::next(std::begin(v), v.size()/2), 0);
for (auto begin(std::begin(v)), end(begin+v.size()/2); begin!=end; ++begin) {
...
}
: 1 Yani şimdi ya std :: birikir kullanabilirsiniz istediğiniz aralığı belirtin yineleyicinızı veya döngü için bir el kitabı oluşturabilirsiniz
'const_iterator' kullanarak gerçekten mutabiliteye (sadece genel 'const' goodness) ihtiyaç duymadıkça ve 2. '' zamanın sınırlarını aşan bir zamanda hesaplamaktan kaçınmak için, döngü sırasında evrimleşmez. Bu, aşağıdakileri sağlar: (std :: vektör :: const_iterator it = v.begin(), end = v.begin() + v.size()/2; it! = Son; ++ i) '. C++ 11'de kısaltılabilir ('auto' ve' cbegin' kullanarak). –
@ Robᵩ Çünkü ben şamandıralarla çalışmak için biraz fazla kullanıyorum :) – alestanis