嘿伙计我有一个对象数组,我想知道最好的方法是将它作为参数传递给c ++中的函数。
Job jobs[5];
Job是我的类,Jobs [5]是一个包含5个对象的数组
答案 0 :(得分:0)
将数组传递给函数的最佳方法是使用std::vector
。
否则,您将必须传递数组,容量和元素数量。
std::vector
包含这些属性并处理动态内存。您仍然可以使用operator[]
。
另外,更喜欢通过引用传递(因此不会复制) 如果您没有更改函数中的向量,请通过常量引用。
答案 1 :(得分:0)
通常的方法是将指针传递给第一个元素,并将指针传递给数组的末尾:
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
)。
答案 2 :(得分:0)
简单示例,演示如何将作业数组传递给函数并对其执行某些操作:
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;
}