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
- 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. - 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. - 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. - 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. - Không làm thay đổi max_size():
assign()
không làm thay đổi giá trị trả về bởimax_size()
. - Có thể thay đổi iterator:
assign()
làm thay đổi (vô hiệu) các iterator trỏ đến forward_list. - Độ phức tạp:
- Độ phức tạp tuyến tính theo
count
hoặc kích thước củainitializer_list
. - Độ phức tạp tuyến tính theo khoảng cách giữa
first
vàlast
.
- Độ phức tạp tuyến tính theo
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_after | Chè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 |