std::vector::emplace_back
#include <vector>
template <class... Args>
void emplace_back (Args&&... args);
Thêm một phần tử mới vào cuối vector, xây dựng phần tử tại chỗ.
Tham số
Args&&... args
- Danh sách các đối số được chuyển đến hàm dựng (constructor) của phần tử cần thêm.
Giá trị trả về
Không có giá trị trả về
Đặc điểm
emplace_back()
được sử dụng để thêm phần tử mới vào cuối vector. Khác vớipush_back()
, hàm này tạo trực tiếp phần tử tại vị trí cuối cùng của vector mà không cần sao chép hoặc di chuyển.- Hiệu quả hơn so với
push_back()
: Vì không cần tạo đối tượng trung gian và sau đó sao chép hoặc di chuyển vào vector. - Sử dụng trực tiếp đối số để khởi tạo phần tử: Dùng các đối số truyền vào để gọi constructor tương ứng.
- Hữu ích đặc biệt khi làm việc với các đối tượng phức tạp, hoặc các lớp có hàm dựng nhiều tham số.
- Hàm chỉ khả dụng nếu std::vector có thể lưu trữ phần tử kiểu tương ứng và kiểu đó có constructor chấp nhận danh sách tham số
Args
.
Ví dụ
Thêm phần tử đơn giản
#include <iostream>
#include <vector>
#include <string>
int main() {
std::vector<std::string> vec;
vec.emplace_back("Hello");
vec.emplace_back(10, 'A'); // Tạo chuỗi gồm 10 ký tự 'A'
for (const auto& str : vec) {
std::cout << str << std::endl;
}
return 0;
}
Thêm đối tượng của một lớp
#include <iostream>
#include <vector>
class Point {
public:
int x, y;
Point(int a, int b) : x(a), y(b) {
std::cout << "Point constructed\n";
}
};
int main() {
std::vector<Point> points;
points.emplace_back(1, 2); // Truyền tham số trực tiếp vào constructor
points.emplace_back(3, 4);
for (const auto& p : points) {
std::cout << "(" << p.x << ", " << p.y << ")\n";
}
return 0;
}
Các hàm liên quan
emplace | Chèn một phần tử mới vào vị trí xác định trong vector, xây dựng phần tử tại chỗ |
erase | Xóa một hoặc nhiều phần tử khỏi vector |
assign | Gán giá trị mới cho các phần tử trong vector |