将对象的动态数组传递给函数

Pass a dynamic array of objects to function

本文关键字:函数 数组 对象 动态      更新时间:2023-10-16

我正在学习c++。所以我知道一个方法,你可以通过它把一些东西发送到函数,然后像按值调用一样工作,但实际上它是按引用调用的。例如

void myFUNC(string& x)

现在,我有了一个动态创建的对象数组。我想像上面的方法一样将数组传递给函数。以下是的代码片段

City *p = new City[number]; // pointer to dynamic array of class objects
//function prototype
void list_cities(int number, City p[]){
    for(int i=0; i<number; i++){
        cout<<p[i].get_name()<<endl;
    }
}

令人困惑的是,一个看起来像数组City p[]的函数参数实际上是一个指针,相当于City * p。所以你只需要把一个指针传给你的动态数组:

list_cities(number, p);

也就是说,更喜欢像std::vector<City>这样友好的类型,这样你就不必篡改指针,小心地避免内存泄漏和更糟的情况。

默认情况下,将数组转换为指针,然后将其作为引用传递。因此,没有规定通过引用显式传递数组。也就是说,

void list_cities(int number, City &p[])

不是作为引用传递的p[],而是使p[]成为引用的数组。

代码:

void list_cities(int number, City p[])
{
    for(int i=0; i<number; i++)
    {
        cout<<p[i].get_name()<<endl;
    }
}
int main()
{
    City *p = new City[number];
    list_cities(number,p);
    delete[] p;
}

使用std::vector还可以执行以下操作:

void list_cities(std::vector<City> &cities)
{
    for (size_t iCity = 0; iCity < cities.size(); iCity++){
        cout << cities[iCity].get_name() << endl;
    }
}
std::vector<City> cities;
// fill list here
list_cities(cities);