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

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

  1. emplace_back() được sử dụng để thêm phần tử mới vào cuối vector. Khác với push_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.
  2. 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.
  3. 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.
  4. 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ố.
  5. 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

emplaceChè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ỗ
eraseXóa một hoặc nhiều phần tử khỏi vector
assignGán giá trị mới cho các phần tử trong vector