什么是将对象数组作为参数传递的最佳方法

时间:2017-04-08 19:48:19

标签: c++ function arguments

嘿伙计我有一个对象数组,我想知道最好的方法是将它作为参数传递给c ++中的函数。

Job jobs[5];

Job是我的类,Jobs [5]是一个包含5个对象的数组

3 个答案:

答案 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::beginstd::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;
}
相关问题