Tôi đang gặp sự cố khi sử dụng trình lặp ngược ngược lại trên các vùng chứa không phải const với gcc. Vâng, chỉ có một số phiên bản của gcc.toán tử so sánh gcc reverse_iterator bị thiếu?
#include <vector>
#include <iostream>
using namespace std;
int main() {
const char v0[4] = "abc";
vector<char> v(v0, v0 + 3);
// This block works fine
vector<char>::const_iterator i;
for (i = v.begin(); i != v.end(); ++i)
cout << *i;
cout << endl;
// This block generates compile error with gcc 3.4.4 and gcc 4.0.1
vector<char>::const_reverse_iterator r;
for (r = v.rbegin(); r != v.rend(); ++r)
cout << *r;
cout << endl;
return 0;
}
Chương trình này biên dịch OK và chạy với gcc 4.2.1 (Mac Leopard) và Visual Studio 8 và 9 (Windows) và với gcc 4.1.2 (Linux).
Tuy nhiên, có lỗi biên dịch với gcc 3.4.4 (cygwin) và với gcc 4.0.1 (Mac Snow Leopard).
test.cpp:18: error: no match for 'operator!=' in 'r != std::vector<_Tp, _Alloc>::rend() [with _Tp = char, _Alloc = std::allocator<char>]()'
Đây có phải là một lỗi trong phiên bản trước của gcc?
Do các vấn đề khác với gcc 4.2.1 trên máy Mac, chúng tôi cần sử dụng gcc 4.0.1 trên máy Mac, vì vậy chỉ cần sử dụng trình biên dịch mới hơn không phải là giải pháp hoàn hảo cho tôi. Vì vậy, tôi đoán tôi cần phải thay đổi cách tôi sử dụng trình lặp ngược. Bất kỳ đề xuất?
Để giải quyết sự cố, tác vụ '! (R == v.rend())' có hoạt động không? Hoặc bạn có thể thử nó với phiên bản không đảo ngược thông qua 'r.base()'. –
Nhiều khả năng là thiếu sót; Tôi nghĩ rằng hỗ trợ đầy đủ cho toàn bộ STL là * vẫn * đang diễn ra, mặc dù rất gần. Trở lại trong những ngày 3.4.4 nó đã phần nào không đầy đủ. – meagar
@gf Rất tiếc, "! (R == v.rend())" không hoạt động. Cả hai toán tử "! =" Và "==" đều bị thiếu. –