std::list::push_front
#include <list>
void push_front(const value_type& val); // (1)
void push_front(value_type&& val); // (2) (since C++11)
Thêm một phần tử mới vào đầu std::list.
Tham số
val
- Giá trị của phần tử cần thêm vào đầu std::list.
- Phiên bản (1) nhận tham chiếu hằng (
const value_type&
), cho phép truyền vào một đối tượng đã tồn tại. Đối tượng sẽ được sao chép (copy) vào std::list. - Phiên bản (2) (từ C++11) nhận tham chiếu rvalue (
value_type&&
), cho phép di chuyển (move) đối tượng vào std::list nếuval
là một rvalue, tránh việc sao chép không cần thiết, tối ưu hiệu suất.
- Phiên bản (1) nhận tham chiếu hằng (
Giá trị trả về
Không có giá trị trả về
Đặc điểm
- Thêm phần tử vào đầu:
push_front()
luôn thêm phần tử mới vào đầu std::list. - Tăng kích thước:
push_front()
làm tăng kích thước của std::list lên 1. - Hỗ trợ copy và move: Phiên bản (1) thực hiện sao chép phần tử được truyền vào. Phiên bản (2) (từ C++11) hỗ trợ di chuyển (move semantics), giúp tối ưu hiệu suất khi thêm các đối tượng lớn hoặc phức tạp vào std::list.
- Không làm thay đổi vị trí tương đối của các phần tử đã tồn tại: Khi chèn phần tử mới vào đầu std::list, các phần tử đã tồn tại trong std::list sẽ được dời về phía sau, nhưng thứ tự tương đối giữa chúng vẫn được giữ nguyên.
- Độ phức tạp: Độ phức tạp của
push_front()
làO(1)
- thời gian hằng số. Đây là một trong những ưu điểm chính của std::list so với std::vector (độ phức tạp chèn vào đầu của std::vector làO(n)
).
Ví dụ
#include <iostream>
#include <list>
int main() {
std::list<int> mylist;
mylist.push_front(10); // Thêm 10 vào đầu danh sách
mylist.push_front(20); // Thêm 20 vào đầu danh sách
mylist.push_front(30); // Thêm 30 vào đầu danh sách
std::cout << "mylist:";
for (int x : mylist) {
std::cout << ' ' << x;
}
std::cout << '\n'; // Output: mylist: 30 20 10
return 0;
}
Ví dụ về move semantics
#include <iostream>
#include <list>
#include <string>
int main() {
std::list<std::string> mylist;
std::string str = "Hello";
mylist.push_front(str); // Sao chép str vào mylist
mylist.push_front(std::move(str)); // Di chuyển str vào mylist (str sẽ trở thành rỗng sau lời gọi này)
mylist.push_front("World"); // Tạo một đối tượng string tạm thời và di chuyển nó vào mylist
std::cout << "mylist:";
for (const std::string& s : mylist) {
std::cout << ' ' << s;
}
std::cout << '\n'; // Output: mylist: World Hello
std::cout << "str after move: " << str << '\n'; // Output: str after move: (empty string)
return 0;
}
Các hàm liên quan
push_back | Thêm một phần tử mới vào cuối std::list |
pop_front | Xóa phần tử đầu tiên của std::list |
insert | Chèn một hoặc nhiều phần tử mới vào một vị trí cụ thể trong std::list |