std::list::assign
#include <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 std::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
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 std::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 std::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. - Có thể làm thay đổi iterator:
assign()
làm thay đổi (vô hiệu) các iterator trỏ đến std::list. - An toàn exception: Nếu exception xảy ra (ví dụ: std::bad_alloc khi cấp phát bộ nhớ cho các phần tử mới, hoặc exception từ constructor của
value_type
), list sẽ không thay đổi. - Độ phức tạp:
- Phiên bản 1 và 2: Độ phức tạp tuyến tính theo
count
hoặc kích thước của initializer_list -O(n)
. - Phiên bản 3: Độ phức tạp tuyến tính theo khoảng cách giữa
first
vàlast
-O(n)
.
- Phiên bản 1 và 2: Độ phức tạp tuyến tính theo
Ví dụ
#include <iostream>
#include <list>
#include <vector>
int main() {
std::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 std::list khác hoặc một danh sách khởi tạo cho std::list hiện tại. |
insert | Chèn một hoặc nhiều phần tử mới vào một vị trí cụ thể trong std::list |