Hi mọi người,
Mình có 1 đoạn code như sau:
int main()
{
std::list<int> mylist;
for (int i = 0; i < 8; ++i) // 1 2 3 4 5 6 7 8
mylist.push_back(i + 1);
mylist.insert(mylist.begin(), 0); // thêm phần tử 0 vào đầu list
mylist.insert(mylist.end(), 4, 12);
mylist.insert(mylist.end(), 13); // thêm phần tử 13 vào cuối list
auto it = mylist.begin();
++it; // cho con trỏ it trỏ đến phần tử thứ hai trong list
mylist.insert(++it, 2, 3); // thêm 2 lần phần tử 3 vào vị trí 3 trong list
std::cout << "Original list: ";
for (auto &var : mylist)
std::cout << var << " ";
std::cout << std::endl;
mylist.erase(--mylist.end()); // xóa phần tử cuối cùng trong list
mylist.erase(++it); // xóa phần tử ở vị trí 4 trong list
std::cout << "\nLast list: ";
for (auto &var : mylist)
std::cout << var << " ";
return 0;
}
Đoạn code trên chỉ thêm/xóa rồi xuất như bình thường thôi.
Đây là kết quả chương trình xuất ra:

Nếu để ý thì mình thấy ở dòng này:
mylist.erase(++it); // xóa phần tử ở vị trí 4 trong list
nó phải xóa đi phần tử ở vị trí 3 (tính từ vị trí 0) chứ sao nó lại xóa đi phần tử ở vị trí 5 nhỉ ? vì con trỏ it đang trỏ tới vị trí 3.
Nhờ mọi người giúp mình chỗ này, chứ mình mò sáng giờ mà không hiểu vì sao.
Mình cảm ơn !

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?