无法将向量类型的元素添加到向量中吗?

时间:2015-01-27 06:17:37

标签: c++ vector struct

我正在尝试将两个值添加到自定义类型的向量中,而不创建该类型的变量。

typedef struct duo{
    int uniqueID; 
    double data; 
};

vector<duo> myVector;
myVector.push_back({1,1.0});

但它不会允许它?

我能让它发挥作用的唯一方法是创建变量,但感觉很乏味......

vector<duo> myVector;
duo temp = {1,1.0};
myVector.push_back(temp);

另外......为什么我不能这样做?

duo temp;
temp = {1,1.0}; 

但我可以这样做:

duo temp = {1,1.0};

???

2 个答案:

答案 0 :(得分:1)

使用std::vector::emplace_back()构建矢量时,可以避免创建临时对象。

以下是代码示例。

class duo {
public:
    duo(int uniqueID_, double data_)
        : uniqueID(uniqueID_)
        , data(data_) {}

private:        
    int uniqueID; 
    double data; 
};


int main() {
    vector<duo> myVector;
    myVector.emplace_back(1, 1.0);
}

答案 1 :(得分:0)

如果您使用的是C ++ 11编译器,请使用g++ -std=c++11编译.cpp文件。另外,从typedef的定义中删除struct duo

否则,您可以为duo创建参数化构造函数,然后将push_back duo个对象的构造函数用于向量。

代码:

struct duo {
    int uniqueID; 
    double data; 
    duo(int _uniqueID, double _data) : uniqueID{_uniqueID}, data{_data} {}
};

vector<duo> myVector;
myVector.push_back(duo(1,1.0)); //This compiles.

希望有所帮助。