我正在尝试将两个值添加到自定义类型的向量中,而不创建该类型的变量。
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};
???
答案 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.
希望有所帮助。