不能将结构类型的元素添加到向量?

Posted

技术标签:

【中文标题】不能将结构类型的元素添加到向量?【英文标题】:Can't add elements of a struct type to vector? 【发布时间】:2015-01-27 06:17:37 【问题描述】:

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

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;

???

【问题讨论】:

你用的是什么编译器? 如果您使用的是 C++11 编译器,您的代码应该可以编译。而那个typedef 是没有用的。 请不要编辑以包含多个问题。如果您有新问题,请单独提出。 我同时使用 MSVC 编译器和 Intel 编译器 ***.com/questions/4303513/push-back-vs-emplace-back 这个问题的有用链接 【参考方案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);

【讨论】:

【参考方案2】:

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

否则,您可以为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.

希望有所帮助。

【讨论】:

如果你在Linux上,打开终端;如果在 Windows 上,请打开命令提示符。访问您的 .cpp 文件所在的目录。让 .cpp 文件名为 x.cpp 。所以,如果在 Linux 上写g++ -std=c++11 x.cpp -o x 如果在 Windows 上写g++ -std=c++11 x.cpp -o x.exe。这样你就不会在编译时出错了。

以上是关于不能将结构类型的元素添加到向量?的主要内容,如果未能解决你的问题,请参考以下文章

当我使用父类指针将它们添加到向量时,我不能使用子类特定的功能

将结构添加到字节向量,然后添加另一个[关闭]

不能将结构分配给向量的索引吗? [关闭]

迭代器在添加到添加到列表向量的结构中时会停止指向某个值吗?

将向量的元素添加到无序集合

C++ 为啥我不能将此指针保存到引用?