将对象的动态数组传递给函数
Pass a dynamic array of objects to function
我正在学习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);
相关文章:
- 第 i 个元素返回 i 的函数数组
- 使用嵌套函数数组是个好主意吗?
- 正确实现类函数数组
- 试图引用已删除函数数组的相等运算符
- 如何在静态函数中使用成员函数数组
- 无法创建函数数组
- 构造函数数组
- 使用开关或定义函数数组 - 更快
- 编写一个函数,该函数将覆盖主函数数组中的值
- 可以像'funs[1]();'一样调用的函数数组
- std::AVX内部函数数组
- 如果数组大小未知,如何将函数数组作为参数传递
- 从函数数组中获取值
- 使用元编程在编译时初始化函数数组
- 将C函数数组转换为C++函数指针数组
- 复制构造函数 [数组] C++
- 添加函数数组并随机选择其中一个
- 指针到私有成员函数数组
- 可以单独声明函数数组的元素
- (c++)将main中的随机值保存到函数数组中