如何在 C++ 中创建类对象的向量?
Posted
技术标签:
【中文标题】如何在 C++ 中创建类对象的向量?【英文标题】:How to create a vector of class objects in C++? 【发布时间】:2014-02-20 20:50:19 【问题描述】:我正在尝试使用 C++ 中的向量创建一个简单的堆栈。
代码如下:
#include <vector>
class Site
public:
int i; // site position i (x-axis)
int s; // site state
vector<Site> neighbors;
Site(void);
Site(int ii, int ss);
void AddNeighbor(Site &site);
;
Site::Site()
i = -1;
s = -1;
vector<Site> neighbors;
Site::Site(int ii, int ss)
i = ii;
s = ss;
void Site::AddNeighbor(Site &site)
neighbors.push_back(site);
void testStack()
int tot = 600;
vector<Site> myStack();
int i = 0;
while (i < tot)
Site site(i, 1);
myStack.push_back(site);
i++;
i = 0;
while (i < tot)
Site *site = myStack.back();
myStack.pop_back();
cout << site->i << site->s << endl;
i++;
编译器错误:
ising_wolff.cpp:在函数“void testStack()”中: ising_wolff.cpp:373:17:错误:请求成员“push_back” ‘myStack’,它是非类类型‘std::vector()’ myStack.push_back(站点); ^ ising_wolff.cpp:380:30: 错误:请求‘myStack’中的成员‘back’,它是非类类型‘std::vector()’ 站点 *site = myStack.back(); ^ ising_wolff.cpp:381:17: 错误:在‘myStack’中请求成员‘pop_back’,它是非类类型 'std::vector()' myStack.pop_back();
这些错误是什么意思?
以下是我看过的一些网站:
1) Creating objects while adding them into vectors
2) push_back causing errors in C
3)how to create vectors of class object
【问题讨论】:
我在审核前提出了两个问题... 【参考方案1】:如何在 C++ 中创建类对象向量?
从简单的开始,这样你就可以掌握它。
首先,创建一个原始整数向量:
#include <vector>
#include <iostream>
using namespace std;
int main()
vector<int> sites(5);
sites.push_back(5);
for(int x = 0; x < sites.size(); x++)
cout << sites[x];
cout << endl;
return 0;
编译:
g++ -o test test.cpp
运行它:
./test
000005
以与上述类似的方式创建类对象的向量:
#include <iostream>
#include <vector>
using namespace std;
class Site
public:
int i;
;
int main()
vector<Site> listofsites;
Site *s1 = new Site;
s1->i = 7;
Site *s2 = new Site;
s2->i = 9;
listofsites.push_back(*s1);
listofsites.push_back(*s2);
vector<Site>::iterator it;
for (it = listofsites.begin(); it != listofsites.end(); ++it)
cout << it->i;
return 0;
应该打印的内容:
79
【讨论】:
【参考方案2】:vector<Site> myStack();
这实际上是一个函数声明。该函数称为myStack
,它返回一个vector<Site>
。你真正想要的是:
vector<Site> myStack;
目前neighbours
的类型将存储对象的副本,而不是引用。如果你真的想存储引用,我建议使用std::reference_wrapper
(而不是使用指针):
vector<reference_wrapper<Site>> neighbors;
【讨论】:
如果我像你说的那样声明邻居,Site
类中的方法AddNeighbors
将保持正确吗?谢谢你的回答:)
当我使用std::reference_wrapper
时,就像你建议的那样,编译器给了我错误:In member function ‘void Site::AddNeighbor(Site&)’: ising_wolff.cpp:38:29: error: no matching function for call to ‘std::vector<std::reference_wrapper<Site> >::push_back(Site&)’
in neighbors.push_back(site);
。然后打印出一大堆“候选人”来代替……名单长得看不下去了
@Girardi 哦,对不起,我误解了你之前的问题。你需要做neighbors.push_back(std::ref(site))
。
它说ref
不是std
的成员
对不起,我没有注意到您引用的链接中的header
=)【参考方案3】:
vector<Site> myStack();
这是错误的。丢掉()
。
你声明的是一个函数,而不是一个向量。
只写:
vector<Site> myStack;
【讨论】:
【参考方案4】:你可以使用:
vector<Site> myStack;
myStack.resize(100); //will create 100 <Site> objects
【讨论】:
以上是关于如何在 C++ 中创建类对象的向量?的主要内容,如果未能解决你的问题,请参考以下文章