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

std::forward_list::resize

#include <forward_list>

void resize(size_type count);
void resize(size_type count, const value_type& value);

Thay đổi kích thước của forward_list, tức là thay đổi số lượng phần tử mà forward_list chứa.

Tham số

count

  • Kích thước mới của forward_list (số lượng phần tử).

value

  • Giá trị để khởi tạo các phần tử mới được thêm vào (nếu có).

Giá trị trả về

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

Đặc điểm

  1. Thay đổi kích thước: resize() thay đổi trực tiếp số lượng phần tử trong forward_list.
  2. Xóa hoặc thêm phần tử: resize() có thể xóa bớt các phần tử ở cuối hoặc thêm các phần tử mới vào cuối forward_list, tùy thuộc vào count mới.
  3. Khởi tạo giá trị: Các phần tử mới được thêm vào (nếu có) sẽ được khởi tạo bằng giá trị mặc định của kiểu phần tử hoặc bằng giá trị value được cung cấp.
  4. Không làm thay đổi các phần tử đã tồn tại trước đó: resize() chỉ ảnh hưởng đến số lượng phần tử, không thay đổi giá trị của các phần tử đã tồn tại trước khi gọi resize().
  5. Có thể làm thay đổi iterator: Việc thay đổi kích thước của forward_list có thể làm thay đổi (invalidate) các iterator đang trỏ đến forward_list.
  6. Độ phức tạp: Độ phức tạp của resize() phụ thuộc vào sự chênh lệch giữa kích thước cũ và mới:
    • Nếu count nhỏ hơn kích thước hiện tại, độ phức tạp là O(n), với n là số phần tử bị xóa.
    • Nếu count lớn hơn kích thước hiện tại, độ phức tạp là O(m), với m là số phần tử được thêm mới.

Ví dụ

#include <iostream>
#include <forward_list>

int main() {
std::forward_list<int> mylist = {1, 2, 3, 4, 5};

std::cout << "Original size: " << std::distance(mylist.begin(), mylist.end()) << '\n'; // Output: Original size: 5

mylist.resize(3);
std::cout << "Size after resize(3): " << std::distance(mylist.begin(), mylist.end()) << '\n'; // Output: Size after resize(3): 3
std::cout << "Elements after resize(3):";
for (int x : mylist) std::cout << ' ' << x; // Output: Elements after resize(3): 1 2 3
std::cout << '\n';

mylist.resize(6);
std::cout << "Size after resize(6): " << std::distance(mylist.begin(), mylist.end()) << '\n'; // Output: Size after resize(6): 6
std::cout << "Elements after resize(6):";
for (int x : mylist) std::cout << ' ' << x; // Output: Elements after resize(6): 1 2 3 0 0 0
std::cout << '\n';

mylist.resize(8, 99);
std::cout << "Size after resize(8, 99): " << std::distance(mylist.begin(), mylist.end()) << '\n'; // Output: Size after resize(8, 99): 8
std::cout << "Elements after resize(8, 99):";
for (int x : mylist) std::cout << ' ' << x; // Output: Elements after resize(8, 99): 1 2 3 0 0 0 99 99
std::cout << '\n';

return 0;
}

Các hàm liên quan

clearXóa tất cả các phần tử khỏi forward_list, làm cho forward_list trở thành rỗng
erase_afterXóa một hoặc nhiều phần tử khỏi forward_list tại vị trí sau một iterator cho trước
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
max_sizeTrả về số lượng phần tử tối đa mà forward_list có thể chứa
removeXóa tất cả các phần tử có giá trị bằng với một giá trị cho trước khỏi forward_list
mergeHợp nhất (merge) hai forward_list đã được sắp xếp thành một forward_list duy nhất