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

std::forward_list::assign

#include <forward_list>

// Phiên bản 1: Gán các phần tử từ một dãy các giá trị
void assign(size_type count, const value_type& value);

// Phiên bản 2: Gán các phần tử từ một initializer list
void assign(initializer_list<value_type> ilist);

// Phiên bản 3: Gán các phần tử từ một iterator range
template <class InputIterator>
void assign(InputIterator first, InputIterator last);

Gán các phần tử mới cho forward_list, thay thế nội dung hiện tại của nó.

Tham số

count

  • Số lượng phần tử cần gán.

value

  • Giá trị của các phần tử cần gán.

ilist

  • Danh sách khởi tạo (initializer_list) chứa các phần tử cần gán.

first, last

  • Iterator xác định phạm vi các phần tử cần gán. first trỏ đến phần tử đầu tiên, last trỏ đến phần tử sau phần tử cuối cùng (past-the-end).

Giá trị trả về

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

Đặc điểm

  1. Thay thế nội dung hiện tại: assign() xóa tất cả các phần tử hiện có trong forward_list và thay thế chúng bằng các phần tử mới được chỉ định.
  2. Thay đổi kích thước: assign() thay đổi kích thước của forward_list để phù hợp với số lượng phần tử được gán.
  3. Nhiều phiên bản: assign() cung cấp nhiều phiên bản khác nhau để gán giá trị từ các nguồn khác nhau, bao gồm lặp lại một giá trị, initializer_list và iterator range.
  4. Hiệu quả: Việc sử dụng assign() thường hiệu quả hơn so với việc xóa tất cả các phần tử rồi sau đó chèn các phần tử mới vào.
  5. Không làm thay đổi max_size(): assign() không làm thay đổi giá trị trả về bởi max_size().
  6. Có thể thay đổi iterator: assign() làm thay đổi (vô hiệu) các iterator trỏ đến forward_list.
  7. Độ phức tạp:
    • Độ phức tạp tuyến tính theo count hoặc kích thước của initializer_list.
    • Độ phức tạp tuyến tính theo khoảng cách giữa firstlast.

Ví dụ

#include <iostream>
#include <forward_list>
#include <vector>

int main() {
std::forward_list<int> mylist;

// Phiên bản 1: Gán 5 phần tử có giá trị 10
mylist.assign(5, 10);
std::cout << "mylist after assign(5, 10):";
for (int x : mylist) std::cout << ' ' << x; // Output: mylist after assign(5, 10): 10 10 10 10 10
std::cout << '\n';

// Phiên bản 2: Gán các phần tử từ initializer list
mylist.assign({2, 4, 6, 8});
std::cout << "mylist after assign({2, 4, 6, 8}):";
for (int x : mylist) std::cout << ' ' << x; // Output: mylist after assign({2, 4, 6, 8}): 2 4 6 8
std::cout << '\n';

// Phiên bản 3: Gán các phần tử từ một vector
std::vector<int> myvector = {1, 3, 5, 7, 9};
mylist.assign(myvector.begin() + 1, myvector.end() - 1);
std::cout << "mylist after assign(myvector.begin() + 1, myvector.end() - 1):";
for (int x : mylist) std::cout << ' ' << x; // Output: mylist after assign(myvector.begin() + 1, myvector.end() - 1): 3 5 7
std::cout << '\n';

return 0;
}

Các hàm liên quan

=Gán nội dung của một forward_list khác hoặc một danh sách khởi tạo cho forward_list hiện tại
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