不能将结构类型的元素添加到向量?
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
。这样你就不会在编译时出错了。以上是关于不能将结构类型的元素添加到向量?的主要内容,如果未能解决你的问题,请参考以下文章