c ++数组的动态大小

nyk*_*kon 9 c++ arrays dynamic

我用c ++中的1D数组有一个小问题.我有一个功能线:

void func(int (&array)[???])
{
    // some math here;

    "for" loop {
        array[i] = something;
    }
}
Run Code Online (Sandbox Code Playgroud)

我在代码中的某处调用函数,在我进行数学运算之前,我无法知道数组的维数.该数组作为引用转到函数!,因为我需要在main()函数中使用它.我怎么能像这样分配数组?所以数组有?? 维度转到函数作为引用然后我必须放置维度并写入一些值.

Ign*_*ams 14

既然您正在使用C++,为什么不使用C++ std::vector<>呢?

  • 如果我说从他的问题得出结论我认为他还没有掌握数组和指针的概念,我希望我不会侮辱nykon.这使他无法阅读api文档.如果C++初学者能够从片段"std :: vector <>"中得出标准模板库的存在,那甚至是个问题. (2认同)

Pra*_*rav 10

其他人提到你应该std::vector在C++中使用它们是正确的.

但是你可以通过制作func一个功能模板来使你的代码工作.

template <typename T, size_t N>
void func(T (&array)[N])
{
    // some math here;

    "for" loop {
        array[i] = something;
    }
}
Run Code Online (Sandbox Code Playgroud)

  • @rubenvb:您认为这里"实施"了什么? (6认同)
  • 我同意这些"你应该使用矢量"; 好; 但这个答案提供了解决和理解OP的主要问题的方法...... (5认同)

Fre*_*Foo 9

使用指针,而不是引用:

void func(int *a, int N);
Run Code Online (Sandbox Code Playgroud)

或者,更容易,使用矢量:

void func(std::vector<int> &a);
Run Code Online (Sandbox Code Playgroud)

可以通过简单地说来分配矢量

std::vector<int> a(10);
Run Code Online (Sandbox Code Playgroud)

可以使用检索元素的数量a.size().


Cha*_*via 5

如果传递给的数组func是堆栈数组而不是指针,则可以使用函数模板保留其大小:

template <class T, size_t N>
void func(T(&array)[N])
{
    size_t array_length = N; // or just use N directly
}

int main() 
{
    int array[4];
    func(array);
}
Run Code Online (Sandbox Code Playgroud)

也就是说,正如其他人已经指出的那样,std::vector这可能是最好的解决方案.