Chuyển tới nội dung chính

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ếu val là một rvalue, tránh việc sao chép không cần thiết, tối ưu hiệu suất.

Giá trị trả về

Không có giá trị trả về

Đặc điểm

  1. Thêm phần tử vào đầu: push_front() luôn thêm phần tử mới vào đầu std::list.
  2. Tăng kích thước: push_front() làm tăng kích thước của std::list lên 1.
  3. 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.
  4. 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.
  5. Độ phức tạp: Độ phức tạp của push_front()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::vectorO(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_backThêm một phần tử mới vào cuối std::list
pop_frontXóa phần tử đầu tiên của std::list
insertChèn một hoặc nhiều phần tử mới vào một vị trí cụ thể trong std::list