tôi cố gắng giá trị
Chèn vào vectơ C++ v
Cái trước Tôi
phần tử (hoặc phần tử (sau i-1))
). Mã này rất đơn giản
v.insert(v.begin() + i, value);
tôi chắc chắn Tôi
giữa 0 và v.size()
Tuyên bố này có giá trị khi ở giữa. Hơn nữa, tôi tin rằng khi Tôi
Đúng là lớn hơn v.size()
hoặc số âm, câu lệnh có hành vi không xác định. Nhưng nếu i==v.size()
Vải len? Vì thế v.bắt đầu() + tôi
Nó có phải là một trình vòng lặp hợp lệ không? Nó có được đảm bảo không? v.begin() + v.size() == v.end()
?
Nếu vậy, bạn có thể trích dẫn phần chính xác của tiêu chuẩn không? Ngoài ra, nếu các đảm bảo thay đổi giữa các phiên bản của tiêu chuẩn thì sẽ rất hữu ích nếu biết về những thay đổi này.
Nếu không có những đảm bảo này, có lẽ tôi nên sử dụng đoạn mã sau:
if (i == v.size()) {
v.insert(v.end(), value); // hoặc chỉ v.push_back(value);
} khác {
v.insert(v.begin() + i, value);
}
Nhưng sẽ tốt hơn nếu chỉ sử dụng một dòng như ở đầu câu hỏi này. Trên thực tế, mã ở đầu câu hỏi này hoạt động nhưng tôi muốn đảm bảo rằng nó hoạt động ở mọi nơi. Tôi đã thử tìm kiếm các tiêu chí nhưng không thể tìm thấy thuộc tính này cho các trình vòng lặp truy cập ngẫu nhiên.
giống tài liệu được mô tả
pos - iterator trước đó nội dung sẽ được chèn vào. pos có thể là trình vòng lặp end()
Vì vậy, bạn có thể sử dụng kết thúc()
. Đối với câu hỏi khác của bạn:
Có đảm bảo rằng v.begin() + v.size() == v.end() không?
Có, nếu không thì vòng lặp này:
for( auto it = vec.begin(); it != vec.end(); ++it ) ...
sẽ không hoạt động vì nó phải thực thi chính xác ++nó
vec.size()
Hạng hai.
Tôi là một lập trình viên xuất sắc, rất giỏi!