相关疑难解决方法(0)

函数 std::make_shared<vector> 的参数太多

我错过了一些东西std::make_shared。它不能解决 a 的类型std::initializer_list,还是我做错了什么?

#include <vector>
#include <memory>

class A {};

int main()
{
    A a;
    std::vector<A> veca{A(), A{}, a}; // this works ofc
    std::vector<A> vecb({A(), A{}, a}); // this too

    std::make_shared<std::vector<A>>(vecb); // and this, ofc
    std::make_shared<std::vector<A>>({a}); // what's wrong here?
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

错误:

main.cpp:21:41: error: too many arguments to function ‘std::shared_ptr<_Tp1> std::make_shared(_Args&& ...) [with _Tp = std::vector; _Args = {}]’
     std::make_shared<std::vector<A>>({a});
                                         ^
In file included from /usr/include/c++/6/memory:82:0,
                 from main.cpp:10:
/usr/include/c++/6/bits/shared_ptr.h:632:5: note: declared here
     make_shared(_Args&&... __args) …
Run Code Online (Sandbox Code Playgroud)

c++ vector initializer-list make-shared list-initialization

5
推荐指数
1
解决办法
901
查看次数

将一对插入std :: vector时emplace_back()vs push_back

我定义了以下内容

std::vector<std::pair<int,int> > my_vec;
my_vec.push_back( {1,2} ); //this works
my_vec.emplace_back( {1,2} ); // this doesn't work
std::pair<int,int> temp_pair = {1,2}; 
my_vec.emplace_back( temp_pair );         //this works
Run Code Online (Sandbox Code Playgroud)

我正在使用c ++ 11进行编译。第三行是有问题的,但是我认为您可以emplace_back()在任何地方使用push_back(),但这显然是错误的。为什么第三行不起作用?

c++ stl push c++11 emplace

3
推荐指数
2
解决办法
462
查看次数