我有以下代码(butchered使它变得小而具体):
struct myType_t
{
int a;
string str;
};
typedef vector<myType_t> dataVect_t; // Just for ease of use
...main(...)
{
dataVect_t myData;
myData.push_back((myType_t) {1, "test"}); // THIS IS THE LINE IN QUESTION!
}
编辑:抱歉,这已更正为创建myType_t的实例(不是dataVect_t)
我想将intStringPairVect_t的实例推回到向量中,但我真的不想创建一个变量来执行此操作。我正在做什么似乎编译,但我不是100%确信它是正确的...任何指针(没有双关语意)在这里?
答案 0 :(得分:5)
你想要这个
myData.push_back( myType_t { 1, "test" });
~~~~~~~~
它使用统一初始值设定项来生成myType_t
的对象。
如果您没有使用C ++ 11,那么您可以定义构造函数并按()
执行相同的操作:
struct myType_t
{
myType_t(int a, string str) : a(a), str(str){}
int a;
string str;
};
myData.push_back( myType_t ( 1, "test" ));
答案 1 :(得分:1)
我会用 emplace_back 代替 push_back :
struct myType_t
{
myType_t(int a, string str) : a(a), str(str) { }
int a;
string str;
};
typedef vector<myType_t> dataVect_t; // Just for ease of use
main(...)
{
dataVect_t myData;
myData.emplace_back(1, "test"); // Emplacing directly.
}
这样您就不必创建单独的变量,并且使用emplace_back而不是push_back更有效,因为向量不必复制myType_t实例。
(总的来说,我发现类型有明确的构造函数和必要的参数是有益的。)
如果编译器不支持emplace_back,您仍然可以将此方法与push_back一起使用:
main(...)
{
dataVect_t myData;
myData.push_back(myType_t(1, "test")); // Push back by creating an object.
}
此解决方案的唯一缺点是在插入向量时将复制对象。