Bir yineleme çiftini bekleyen bir işlev için tek bir değer girmeyi ve yalnızca bir çift yineleyiciyi bu değeri içeren bir aralıkta geçirmiş gibi davranmasını istiyorum. aşağıdaki gibiTek bir lvalue üzerinde yineleme
Benim yaklaşımdır:
#include <iostream>
#include <vector>
template<typename Iter>
void iterate_over(Iter begin, Iter end){
for(auto i = begin; i != end; ++i){
std::cout << *i << std::endl;
}
}
int main(){
std::vector<int> a{1,2,3,4};
iterate_over(a.cbegin(), a.cend());
int b = 5;
iterate_over(&b, std::next(&b));
}
Bu g ++ 5.2 düzgün çalışması için görünür, ama bu aslında davranış tanımlanır merak ve ediyorum herhangi bir potansiyel sorunlar varsa?
Yineleyici çiftleri ** aralıkları ** tanımlar. Konteynerler aralıkları oluşturmanın bir yoludur, ancak bunlar tek yol değildir. Yineleyicilerin bir kabın öğelerini işaret etmeleri gerekmez. –
Teşekkürler, açıklık için soruyu düzenledik. – cloakedlearning
Aşağıdakiler de dahil olmak üzere çok sayıda ilgili/yinelenen soru/cevap var: https://stackoverflow.com/questions/14505851/is-the-one-past-the-end-pointer-of-a-non-disney -type-a-geçerli-konsept-in-c, https://stackoverflow.com/questions/2405555/string-s-s1-legal-ub, https://stackoverflow.com/questions/21411102/treating-a -parça-nesne-gibi-bir-dizi-bir-eleman-alma-bir-son-uç-poi, vb – WhozCraig