std::vector::push_back
#include <vector>
void push_back(const T& value);
void push_back(T&& value);
Thêm một phần tử vào cuối vector.
Tham số
value
- Giá trị cần thêm vào vector.
- Tham chiếu hằng (
const T&
): Truyền tham chiếu hằng nếu bạn không muốn sửa đổivalue
. - Rvalue reference (
T&&
): Truyền một giá trị tạm thời (temporary object) khi muốn tận dụng tính năng move semantics (chỉ khả dụng từ C++11 trở đi).
Giá trị trả về
- Không có giá trị trả về
- Nếu có lỗi (như không đủ bộ nhớ), ngoại lệ
std::bad_alloc
sẽ được ném ra.
Đặc điểm
- Hàm thêm phần tử mới vào cuối vector, làm tăng kích thước của vector lên 1.
- Nếu dung lượng hiện tại của vector không đủ để chứa thêm phần tử mới, vector sẽ tự động mở rộng dung lượng (capacity). Quá trình này có thể dẫn đến việc tái cấp phát (reallocation), có thể tốn kém về mặt thời gian.
- vector thường tăng dung lượng (capacity) theo cấp số nhân để giảm số lần cấp phát lại.
- Phần tử được thêm vào cuối vector. Vector đảm bảo phần tử được duy trì thứ tự.
- C++11 đã thêm khả năng sử dụng hàm
push_back()
với giá trị tạm thời (rvalue) thông qua&& value
. - Nếu sử dụng
T&&
, đối tượng sẽ được di chuyển thay vì sao chép, giúp cải thiện hiệu năng. - Nếu vector là
std::vector<T>
màT
không thể sao chép hoặc di chuyển (copyable/movable), bạn không thể dùngpush_back()
. - Khi sử dụng
push_back()
với kiểu dữ liệu phức tạp nhưstd::string
, việc truyền bằngstd::move
có thể tối ưu hiệu suất. - Sử dụng
push_back()
thường nhanh, nhưng có thể chậm nếu vector cần cấp phát lại dung lượng. - Dùng trước
reserve()
để tránh cấp phát lại nếu biết trước số lượng phần tử.numbers.reserve(100); // Tránh cấp phát lại khi thêm 100 phần tử.
Ví dụ
#include <iostream>
#include <vector>
#include <string>
int main() {
std::vector<int> numbers;
numbers.push_back(1);
numbers.push_back(2);
numbers.push_back(3);
for (int num : numbers) {
std::cout << num << " ";
}
// Output: 1 2 3
std::vector<std::string> words;
words.push_back("Hello");
words.push_back("World");
for (const auto& word : words) {
std::cout << word << " ";
}
// Output: Hello World
return 0;
}
Thêm phần tử với giá trị thông thường (sao chép lvalue
):
std::vector<int> vec;
vec.push_back(10); // Thêm phần tử có giá trị 10 vào cuối vector
Thêm phần tử với giá trị tạm thời (move semantics) (di chuyển rvalue
):
std::vector<std::string> vec;
std::string str = "Hello";
vec.push_back(std::move(str)); // Di chuyển str vào cuối vector
Các hàm liên quan
pop_back | Xóa phần tử cuối cùng của vector |
insert | Chèn một hoặc nhiều phần tử vào vị trí xác định trong vector |