如何在 C++ 中制作类向量?

Posted

技术标签:

【中文标题】如何在 C++ 中制作类向量?【英文标题】:How to make a vector of classes in C++? 【发布时间】:2020-08-01 04:03:57 【问题描述】:

我正在尝试制作一个存储城市及其时区的向量。

我已经声明了City 类,我想输出向量中每个CitycityName

#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++ 中制作类向量?的主要内容,如果未能解决你的问题,请参考以下文章

C++ 如何制作二维向量函数?

如何在 C++ 中访问类对象向量中的对象?

如何找到存储在 C++ 向量中的对象的类方法?

如何将来自先前类的值存储到 C++ 中的向量中?

如何在 C++ 中读取文件并将文件中的数据插入到类类型的向量中?

如何在 C++ 中创建类对象的向量?