Tôi đã cố gắng lập chỉ mục một số vector
sử dụng chỉ mục phủ định. Hàm thành viên vector::at()
kiểm tra xem chỉ mục được chỉ định nằm trong giới hạn của vectơ và nếu điều này không xảy ra, ngoại lệ out_of_range
sẽ được ném.Lập chỉ mục một tiêu chuẩn :: vectơ với chỉ số âm
vector<float> array; // sample vector
array.push_back(0.123);
array.push_back(1.234);
array.push_back(2.345);
array.push_back(3.456);
array.push_back(4.567);
int index = -1;
float f = array.at(index);
cout << f << endl;
Chữ ký của vector::at()
chức năng thành viên yêu cầu các tham số chỉ định của vector<T>::size_type
loại, và loại này là unsigned int
cho vector, do đó trình biên dịch sẽ thực hiện một chuyển đổi ngầm từ int
(kiểu của biến index
) đến unsigned int
. Vì giá trị index
là -1
trong ví dụ trên, được chuyển đổi hoàn toàn index
là 4294967295
(đó là giá trị tối đa của loại unsigned int
): giá trị này được chuyển đến vector::at()
chức năng thành viên, có ngoại lệ out_of_range
.
Nói cách khác, ngoại lệ này không được ném bởi vì chức năng vector::at()
thành viên thấy rằng index
là nhỏ hơn không, nhưng thay vì chuyển đổi ngầm index
lớn hơn kích thước hiện tại của vector
. Đây có phải là lời giải thích đúng không?
Có, về cơ bản. – Dave
Vâng, đó là giải thích đúng. – syam