【发布时间】:2014-06-25 22:27:18
【问题描述】:
C++ Primer 中声明
在 C++ 中,指针和数组紧密相连。特别是,作为 我们会看到,当我们使用数组时,编译器通常会将 指向指针的数组。
我想使用迭代器来打印数组。下面的程序运行良好,但是当我尝试打印arr2 或arr3 时,如果我没记错,它是int * 类型,我得到一个错误(判断& 运算符表示下面的参考)。
error: no matching function for call to ‘begin(int*&)’
int main(int argc, char** argv) {
int arr[] = {0,1,2,3,4,5,6,7,8,9};
auto arr2 = arr;
auto arr3(arr); // I think arr2 and arr3 are of same type
for(auto it = std::begin(arr) ; it != std::end(arr) ; ++it)
std::cout << *it << " ";
std::cout << std::endl;
return 0;
}
考虑到语句,如果一个数组被编译器转换为一个指针,这个程序如何使用std::begin()和std::end()打印arr的内容,而不是arr2或@987654331 @如果它们都是指向整数的指针?
编辑
如果我不能说清楚,我很抱歉。我希望我能通过这个编辑来澄清这个问题。
现在我知道begin() 和end() 不适用于指针(感谢答案),我想知道引用的文本是否不正确,因为它指定有一个 Array - > 指针 转换。如果文本所说的是真的,那么arr 的类型应该是一个指针。此时引用的文字有问题吗?
另外,有什么方法可以使用begin() 和end() 指定大小的指针(不是STL 容器),可能使用以下构造函数?
template< class T, size_t N >
T* begin( T (&array)[N] );
【问题讨论】:
-
至于在指针上使用
begin()/end():你不能,但是你可以使用指针本身作为范围开始和指针+大小作为结束。示例:std::sort(yourPointer, yourPointer + arraySize)
标签: c++ arrays pointers c++11 iterator