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

std::forward_list::push_front

#include <forward_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 forward_list.

Tham số

val

  • Giá trị của phần tử cần thêm vào đầu forward_list.
    • const value_type&: nhận tham chiếu hằng, 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 forward_list.
    • value_type&&: nhận tham chiếu rvalue, cho phép di chuyển (move) đối tượng vào forward_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 forward_list.
  2. Tăng kích thước: push_front() làm tăng kích thước của forward_list lên 1.
  3. Hỗ trợ sao chép và di chuyển:
    • Sao chép: thực hiện sao chép phần tử được truyền vào.
    • Di chuyển: 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 forward_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 forward_list, các phần tử đã tồn tại trong forward_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::forward_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 <forward_list>
#include <string>

int main() {
std::forward_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

emplace_frontXây dựng một phần tử mới trực tiếp tại đầu forward_list
pop_frontXóa phần tử đầu tiên của forward_list
insert_afterChèn một hoặc nhiều phần tử mới vào sau một vị trí iterator cho trước trong forward_list