C++ 为什么数组模板迭代器声明需要指定数组大小? 数组a1={1,2,3,4}; 数组::迭代器itr1=a1.begin()//好啊 数组::迭代器itr2=a1.begin()//编译器错误。为什么不允许? //迭代 而(itr1!=a1.end()) { cout

C++ 为什么数组模板迭代器声明需要指定数组大小? 数组a1={1,2,3,4}; 数组::迭代器itr1=a1.begin()//好啊 数组::迭代器itr2=a1.begin()//编译器错误。为什么不允许? //迭代 而(itr1!=a1.end()) { cout,c++,c++11,iterator,C++,C++11,Iterator,当使用具有不同模板参数的模板时,生成的类在任何意义上都不相同。因此std::array和std::array当使用具有不同模板参数的模板时,生成的类在任何意义上都不相同。因此std::array和std::arraystd::array是一个编译时固定大小的容器,有其优点。(对于运行时动态容器,可以使用std::vector)大小必须在编译时设置,因此,array是非法的,甚至不作为类型存在 这种类型是传统数组(如int a[123])的一种很好的替代方法。您可以将std::array传递给比传

当使用具有不同模板参数的模板时,生成的类在任何意义上都不相同。因此
std::array
std::array当使用具有不同模板参数的模板时,生成的类在任何意义上都不相同。因此
std::array
std::array
std::array
是一个编译时固定大小的容器,有其优点。(对于运行时动态容器,可以使用
std::vector
)大小必须在编译时设置,因此,
array
是非法的,甚至不作为类型存在

这种类型是传统数组(如
int a[123]
)的一种很好的替代方法。您可以将
std::array
传递给比传统数组更简单的函数,并且无论何时使用
std::array
都知道长度


函数
.begin()
.end()
使其与其他容器保持一致,您可以像其他STL类型一样对其进行迭代。重要的是要知道
array
array
是具有相同接口的两种不同类型。

std::array
是一种编译时固定大小的容器,具有其优点。(对于运行时动态容器,您可以使用
std::vector
)大小必须在编译时设置,因此,
数组
是非法的,甚至不作为类型存在

这种类型是传统数组(如
int a[123]
)的一种很好的替代方法。您可以将
std::array
传递给比传统数组更简单的函数,并且无论何时使用
std::array
都知道长度



函数
.begin()
.end()
使其与其他容器保持一致,您可以像其他STL类型一样对其进行迭代。重要的是要知道
array
array
是两种不同的类型,具有相同的接口。

WTF,这是如何回答这个问题的,您的答案与迭代器无关我对此进行了扩展。我可能有点卡尔对不起,这个答案还是不对,不应该这样accepted@aaronman.你认为它在哪方面是错的?如果你有比我更好或更清楚的措辞,我很乐意更改它。@aaronman:Concur,这里没有参数。我只是想澄清一下,
iterator
类型是由实现定义的,这似乎是另一种说法,编辑后的答案对实现做出了声明。这是一个微妙的细节,但我想强调一下区别,因为我已经看到这是代码中问题的根源。WTF,这是如何回答这个问题的,你的答案与迭代器无关我对此进行了扩展。我可能有点我被答案迷住了,很抱歉。很抱歉,这个答案仍然不正确,不应该这样accepted@aaronman.你认为它在哪方面是错的?如果你有比我更好或更清楚的措辞,我很乐意更改它。@aaronman:Concur,没有争论。我只是想澄清一下,
iterator
类型是实现定义正如这似乎暗示的那样,经过编辑的答案对实现提出了要求。这是一个微妙的细节,但我想强调区别,因为我已经看到这是代码中问题的根源。下载者请发表评论。您希望
array
是什么
std::array
采用两个模板参数下载者请评论。你希望
array
是什么
std::array
接受两个模板参数这个问题是一个灾难,我在回答java问题时会想到这一点,但是c++11,真丢脸!@aaronman:hahahaaa,可怜的java程序员,我希望他们看不到你的评论:-))这个问题是一场灾难,我在回答java问题时会想到这一点,但是c++11,真丢脸!@aaronman:hahahaaaa,可怜的java程序员,我希望他们不会看到你的评论:-)
array<int,4> a1 = {1,2,3,4};

array<int,4>::iterator itr1 = a1.begin(); //Ok

array<int>::iterator itr2 = a1.begin(); //Compiler error. why not allowed?

//Iteration
    while(itr1 != a1.end())
    {
        cout<<"\n "<<*itr1;
        itr1++;
    }