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

std::forward_list::push_front

#include <forward_list>

Thêm một phần tử mới vào đầu forward_list.

void push_front(const value_type& val); // (1)
void push_front(value_type&& val); // (2) (since C++11)

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() là 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::vector là O(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