如何在 C++ 中制作类向量?
Posted
技术标签:
【中文标题】如何在 C++ 中制作类向量?【英文标题】:How to make a vector of classes in C++? 【发布时间】:2020-08-01 04:03:57 【问题描述】:我正在尝试制作一个存储城市及其时区的向量。
我已经声明了City
类,我想输出向量中每个City
的cityName
。
#include <iostream>
#include <string>
#include <vector>
#include <cmath>
class City
public:
string cityName;
char countryIso1;
char countryIso2;
int offset;
City(string aCityName, char aCountryIso1, char aCountryIso2, int aOffset)
cityName = aCityName;
countryIso1 = aCountryIso1;
countryIso2 = aCountryIso2;
offset = aOffset;
;
vector<City> cities =
"Abidjan", 'C', 'I', 0,
"Lagos", 'N', 'G', 60
;
/* ---------- MAIN ---------- */
int main()
for (int i = 0; i < cities.size(); i++)
cout << cities[i].cityName << endl;
return 0;
我在终端遇到的错误:
error: non-aggregate type 'vector<City>' cannot be initialized
with an initializer list
vector<City> cities =
^ ~
【问题讨论】:
【参考方案1】:sizeof(cities)
不正确。这将返回整个数组占用的数据大小,而不是数组中元素的数量。改成sizeof(cities) / sizeof(cities[0])
更多信息here
编辑添加更正:
int main()
for (int i = 0; i < sizeof(cities) / sizeof(cities[0]); i++)
cout << cities[i].cityName << endl;
return 0;
【讨论】:
如果你的编译器是最新的,你可以使用std::size
。【参考方案2】:
在 C++ 中,使用 vector 或 array 容器而不是原始数组总是更好:
这就是我使用 Array 容器的方式:
std::array<City,3> arr_of_cities;
这就是我使用 Vector 容器的方式:
std::vector<City> vec_of_cities;
添加元素:
vec_of_container.push_back(<City object>);
访问元素:
vec_of_containers.at(<index>);
or
vec_of_container[<index>]; //the first one is better though
(数组容器同理)
【讨论】:
在一个完美的 C++ 世界中,这个答案是你想要走的路线。您希望远离基本数组并尽可能多地使用 STL。它更干净,更易于阅读。以上是关于如何在 C++ 中制作类向量?的主要内容,如果未能解决你的问题,请参考以下文章