将对象数组作为参数传递的最佳方法是什么
Whats the best way to pass an object array as an argument
嘿伙计们,我有一个对象数组,想知道将其作为参数传递给 c++ 函数的最佳方法是什么。
Job jobs[5];
Job 是我的类,Jobs[5] 是一个包含 5 个对象的数组
一个简单的示例,演示如何将作业数组传递给函数并使用它执行某些操作:
class Job
{
public:
int id;
};
void SetJobIds(Job jobs[], int numJobs)
{
// do something useful with your array of jobs
for(int i=0; i<numJobs; ++i)
{
jobs[0].id = i;
}
}
int main() {
const int numJobs = 5;
Job jobs[numJobs];
SetJobIds(jobs, numJobs);
return 0;
}
将数组传递给函数的最佳方法是使用 std::vector
。
否则,您将不得不传递数组、容量和元素数量。
std::vector
包含这些属性并处理动态内存。 您仍然可以使用 operator[]
访问矢量中的元素。
此外,更喜欢通过引用传递(因此不制作副本(。
如果不更改函数中的向量,请通过常量引用进行传递。
通常的方法是传递指向第一个元素的指针和经过数组末尾的指针:
void my_function(Job const * begin, Job const * end);
// const if you don't modify the array values
这将适用于C++标准库使用迭代器的方式,并且可以使用泛型std::begin
和std::end
函数从数组中获取这两个指针:
Job jobs[4];
my_function(std::begin(jobs), std::end(jobs));
但是std::end
怎么知道数组的大小呢?显然,它不能只接受指向数组元素的指针,因为使用数组 lvalue 调用它会触发数组到指针的转换(jobs
与 &(jobs[0])
相同(。
好吧,您还可以在C++中引用数组:
template<typename T, std::size_t Size>
T * my_end(T (& array)[Size]) {
// ^ ^
// reference to array
// parentheses are strictly necessary:
// T & array[Size] is an array of references (to T)
return array + Size;
}
最后说明:建议不要在现代C++中使用原始数组(type name[size]
(,而是使用std::array<type, size> name
(如果大小未知/很大,则std::vector
(。
相关文章:
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 实现无开销push_back的最佳方法是什么
- 在C++中向零方向近似的最佳方法
- 使用不同的CRT将新的C++代码与旧的(二进制)组件隔离开来的最佳方法是什么
- 检测win32服务创建和删除的最佳方法
- 在C++中样板"冷/never_inline"错误处理技术的最佳方法是什么?
- 在 c++ 中对类中的 c 字符串动态数组进行排序的最佳方法是什么?
- 将线程中的数据存储到全局容器的最佳方法?
- 将一系列整数放入类的最佳方法是什么?
- 在派生类中使用基类的私有成员变量的最佳方法
- 在 C++ 中将非指定类型作为参数传递的最佳方法?
- Qt - QVector 和模型视图 - 从列表视图获取自定义类的最佳方法是什么?
- 使用 Git 处理 C++ Visual Studio 2019 解决方案的外部依赖项源代码管理的最佳方法是什么?
- 比较两个节点坐标的最佳方法是什么?
- 在nodejs中使用本机代码的最佳方法是什么?
- 将 pybind11 绑定标记为已弃用的最佳方法
- C++:将向量传递到构造函数以创建成员变量的最佳方法?
- C++中变量混叠的最佳方法
- 读取大文件(>2GB)(文本文件包含以太网数据)并通过不同参数随机访问数据的最佳方法是什么?