数组遍历过程中的修改

问题描述 投票:0回答:1
int * decrementArrayElements(int numbers[], int size){
    for (int &x: numbers)
    {
        x = x-1;
    }
    return numbers ;
}

正如前面提到的,我尝试通过基于范围的范围将每个数组 ele 的 dec 值减 1

如果我尝试正常的 for 循环,它会起作用

int * decrementArrayElements(int numbers[], int size){
    // int n= sizeof(numbers)/sizeof(numbers[0]);
    for (int i=0; i<size; i++)
        numbers[i]=numbers[i]-1;
    return numbers;
}

请解释一下这背后的原因

c++ arrays traversal
1个回答
0
投票

如果您有一个 C 风格的数组,无论出于何种原因您需要安全地传递给函数,您可以使用函数模板。这允许编译器从其类型推断数组大小。

#include <cstdint>
#include <iostream>

template <std::size_t size>
int * decrementArrayElements(int (&numbers)[size])
{
    for (int &x : numbers) --x;
    return numbers;
}

int main()
{
    int numbers[] = { 1, 2, 3, 4 };
    decrementArrayElements(numbers);
    for (int x : numbers) std::cout << x;
}

输出:

0123

在这种情况下,返回指针的模式可能没有那么有用。被滥用的可能性更大。我倾向于制作该功能

void

您可能需要考虑使用

std::array
来代替,它具有更好的封装性并且(与 C 风格数组不同)具有与其他类型一致的复制语义。

#include <array>
#include <cstdint>
#include <iostream>

template <std::size_t size>
std::array<int, size>& decrementArrayElements(std::array<int, size>& numbers)
{
    for (int &x : numbers) --x;
    return numbers;
}

int main()
{
    std::array<int, 4> numbers = { 1, 2, 3, 4 };
    decrementArrayElements(numbers);
    for (int x : numbers) std::cout << x;
}
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.