C++ C++;98阵列大小

C++ C++;98阵列大小,c++,arrays,c++11,C++,Arrays,C++11,我只是想知道是否有一种方法可以分配数组的大小,而不用在C++98中指定它 例如,这是C++11中运行良好的代码: int main(){ int array[]={12,3124,126,35742,3,41234,2}; for (int var: array){ cout << var << endl; } return 0; } intmain(){ int数组[]={12312412635742,341234,2}

我只是想知道是否有一种方法可以分配数组的大小,而不用在C++98中指定它

例如,这是C++11中运行良好的代码:

int main(){
    int array[]={12,3124,126,35742,3,41234,2};
    for (int var: array){
        cout << var << endl;
    }
    return 0;
}
intmain(){
int数组[]={12312412635742,341234,2};
for(int-var:array){

cout我不知道你提到的
array.size
东西,但这就足够了

int main()
{

    int array[]={12,3124,126,35742,3,41234,2};

    for (int i=0; i < sizeof(array)/sizeof(array[0]); i++)
    {
        cout << array[i] << endl;
    }

    return 0;
}
intmain()
{
int数组[]={12312412635742,341234,2};
对于(int i=0;icout我不知道你提到的
array.size
东西,但这就足够了

int main()
{

    int array[]={12,3124,126,35742,3,41234,2};

    for (int i=0; i < sizeof(array)/sizeof(array[0]); i++)
    {
        cout << array[i] << endl;
    }

    return 0;
}
intmain()
{
int数组[]={12312412635742,341234,2};
对于(int i=0;i当然可以。您可以创建一个模板函数,该函数通过引用获取数组并推断大小,然后返回该数组

template<typename T, size_t N>
size_t array_size(T(&)[N]) {
    return N;
}

int main(){
    int array[]={12,3124,126,35742,3,41234,2};
    for (size_t i=0; i<array_size(array); i++){
        cout << array[i] << endl;    
    }
}
模板
大小数组大小(t(&)[N]){
返回N;
}
int main(){
int数组[]={12312412635742,341234,2};

对于(size_t i=0;i当然可以。您可以创建一个模板函数,该函数通过引用获取数组并推断大小,然后返回该值

template<typename T, size_t N>
size_t array_size(T(&)[N]) {
    return N;
}

int main(){
    int array[]={12,3124,126,35742,3,41234,2};
    for (size_t i=0; i<array_size(array); i++){
        cout << array[i] << endl;    
    }
}
模板
大小数组大小(t(&)[N]){
返回N;
}
int main(){
int数组[]={12312412635742,341234,2};


对于(SiZeTyt i=0;为什么不试试?它不起作用。这就是为什么我要问。@ MALCOM98:什么不起作用????????????????????C++。应该是说?AnT,问题只是如何在没有提及的情况下获得数组的大小。Selbie给出了一个很好的例子。我现在就知道了。@Malcom98:你的问题的文本明确地问了如何分配数组而不提及其大小,而不是如何获得已声明数组的大小。你为什么不试试呢?它不起作用。这就是我为什么不这么做的原因问:@ MALCOM98:什么不起作用????????????????????????????????????????????C++?数组中没有提到它。Selbie给出了一个很好的例子。我现在就知道了。@Malcom98:你问题的文本明确地问如何分配一个数组而不提到它的大小,而不是如何得到一个已经声明的数组的大小。哦,我现在就知道了。所以这段代码取整个数组的大小,并用1个数组的大小对它进行划分,这样我们就得到了想要的数组数字。非常感谢!在C++11中没有
countof
std::extent
with
decltype
可用于此目的。请添加一条警告,在将数组传递给函数后,这将不起作用。这是此类数组中的一个常见错误。@TheQuantumPhysicator:如果将数组传递给引用。如果你将指针传递到第一个数组元素,它就不起作用了,因为指针不是数组。哦,我现在知道了。所以这段代码取整个数组的大小,并将其分为1个数组,这样我们就得到了想要的数。非常感谢!C++11中没有
countof
std::extent
with
decltype
can可用于此目的。请注意,将数组传递给函数后,此操作将不起作用。这是此类数组中的常见错误。@TheQuantumPhysical:如果通过引用传递数组,则此操作有效。如果将指针传递给第一个数组元素,则此操作无效,因为指针不是数组。但您不能在C++03中,对于在函数作用域中定义的结构使用它:-/@Jarod42:我不确定您的意思。如何以及为什么要使用一个函数来告诉您在函数作用域中定义的结构的数组大小?我的意思是这样的。我可以在不更改额外代码的情况下添加数据(因此解决方案是使用
sizeof(arr)/sizeof)(*arr)
在这种情况下(或者当struct有意义时,将其移动到名称空间范围).但在C++03中,不能将其用于在函数范围定义的结构:-/@Jarod42:我不确定您的意思。如何以及为什么要使用一个函数来告诉您在函数范围定义的结构的数组大小?我的意思是。我可以在不更改额外代码的情况下添加数据(所以解决方案是在这种情况下使用
sizeof(arr)/sizeof(*arr)
(或者当struct有意义时,在名称空间范围内移动它)。