gpt4 book ai didi

c++ - 是否可以在不为该数组创建变量的情况下将数组作为参数传递给函数?

转载 作者:太空狗 更新时间:2023-10-29 19:47:35 25 4
gpt4 key购买 nike

所以我创建了一个将数组作为参数的函数,我尝试通过将尚未定义为变量的数组传递给所述函数(如 {0,0,0,0})来调用该函数。但是,我收到一条错误消息,提示“初始化值过多”。

假设我们有一个函数定义为:

int func(int values[]) {
int average = 0;
for(int x = 0; x < values.size(); x++) {
average += values[x];
}
return average / values.size();
}

而且我们想在不定义数组的情况下调用它,像这样传入:func({1,6,7,2});

有什么方法可以做这样的事情,还是我必须定义一个数组并以这种方式将其传递给函数?

最佳答案

你不能使用内置数组来做到这一点。数组既不可分配也不可复制的事实。此外,它们不是类,因此它们没有像 size() 这样的成员函数。或者他们采用 Initializer-list。

您可以通过使用 std::array 来实现如果大小不变或使用 std::vector如果大小是动态的。

#include <array>


int func(const std::array<int, 5>& values) {

int average = 0;
for (size_t x{}, sz{ values.size() }; x != sz ; ++x)
average += values[x];

return average / values.size();
}



int main() {
auto ret{
func({ 1, 6, 7, 2 })
};

std::cout << ret << std::endl;
}
  • 也不要像在循环中那样混合使用 Unsigned 和 Signed in 计算:

    for(int x = 0; x < values.size(); x++) // x is int while values.size() is unsigned int.
  • int func(const std::array<int, 5>& values) : 通过引用传递以避免复制,尤其是在尺寸很大的情况下。只要函数不打算更改参数,也可以通过 const 传递。使用 const 引用的另一个好处是您可以传递文字而不是对象。

  • 注意:我建议也使用 range-based for因为只要您想遍历所有元素而不打算 insert,它在您的示例中就非常相关也不 delete元素:

    int average = 0;
    for (const auto& e : values)
    average += e;
  • func 的另一个版本正如@M.M 指出的那样是使用 std::accumalate为您完成工作:

    int func(const std::array<int, 5>& values) {    
    return std::accumulate(values.begin(), values.end(), 0) /
    values.size();
    }

关于c++ - 是否可以在不为该数组创建变量的情况下将数组作为参数传递给函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55327698/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com