gpt4 book ai didi

c++ - 使用默认构造函数在 vector 中放置

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:18:41 24 4
gpt4 key购买 nike

我想使用 vector::emplace 默认构造一个不可复制不可分配 对象,然后使用特定方法对象使用迭代器指向新创建的对象。请注意,该类没有参数化构造函数,只有默认构造函数。一个简单的例子是:

#include <iostream>
#include <vector>
using namespace std;

class Test {
public:
Test() {}
private:
Test(const Test&) = delete; // To make clas un-copyable.
Test& operator=(const Test&) = delete;

int a_;
};

int main() {
vector<Test> test_vec;
test_vec.emplace_back(); // <---- fails

return 0;
}

vector::emplace() 构造一个新对象但需要非默认构造函数的参数。 vector::emplace_back() 将在 vector 的末尾构造。

有没有一种方法可以放置默认构造。有没有办法像 map 那样使用分段构造或默认转发,也许使用 std::piecewise_construct ?例如,对于 map ,我们可以使用:

std::map<int,Test> obj_map;
int val = 10;
obj_map.emplace(std::piecewise_construct,
std::forward_as_tuple(val),
std::forward_as_tuple());

vector 有类似的东西吗?

最佳答案

vector::emplace_back() will construct at the end of the vector but also require arguments.

参数包可以为空。因此可变参数模板 emplace_back 可以在没有参数的情况下调用;即

vector<VeryLimitedClass> vec;
vec.emplace_back();

是通过其默认构造函数初始化 VeryLimitedClass 类型对象并将其“放置”在 vec 后面的有效代码。

关于c++ - 使用默认构造函数在 vector 中放置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27067868/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com