Tôi muốn chuyển một giá trị đơn lẻ đến một hàm dự kiến một cặp vòng lặp và cho nó hoạt động như thể tôi đã chuyển một cặp vòng lặp tới một phạm vi chỉ chứa giá trị này.Lặp lại một giá trị duy nhất
cách tiếp cận của tôi là như sau:
#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));
}
Điều này dường như làm việc một cách chính xác bằng g ++ 5.2, nhưng tôi đang tự hỏi nếu điều này là thực sự được xác định hành vi và nếu có bất kỳ vấn đề tiềm năng?
Cặp lặp lại mô tả ** phạm vi **. Thùng chứa là một cách tạo phạm vi, nhưng chúng không phải là cách duy nhất. Không có yêu cầu mà các trình vòng lặp trỏ đến các phần tử của một thùng chứa. –
Cảm ơn, đã chỉnh sửa câu hỏi để rõ ràng. – cloakedlearning
Có vô số câu hỏi/câu hỏi liên quan/trùng lặp về vấn đề này, bao gồm: https://stackoverflow.com/questions/14505851/is-the-one-past-the-end-pointer-of-a-non-array -type-a-valid-concept-in-c, https://stackoverflow.com/questions/2405555/string-s-s1-legal-ub, https://stackoverflow.com/questions/21411102/treating-a -single-object-like-an-array-với-một-yếu tố-tham-một-qua-cuối-poi, vv – WhozCraig