#include <iostream>
#include <iterator>
using namespace std;
void print(int ia[])
{
int *p = begin(ia);
while(p != end(ia))
cout<<*p++<<'\t';
}
int main()
{
int ia[] = {1,2,3,4},i;
print(ia);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
P指向ia中的第一个元素.为什么它说"错误:没有匹配函数来调用'begin(int*&)'c ++"谢谢!:)
Oli*_*rth 12
因为在里面print(),变量ia是一个指针,而不是一个数组.调用begin()指针没有意义.
您正在指针上使用begin和end自由函数,这是不允许的.
你可以用C++ 11做类似的事情 intializer_list
//g++ -std=c++0x test.cpp -o test
#include <iostream>
#include <iterator>
using namespace std;
void print(initializer_list<int> ia)
{
auto p = begin(ia);
while(p != end(ia))
cout<<*p++<<'\t';
}
int main()
{
print({1,2,3,4});
return 0;
}
Run Code Online (Sandbox Code Playgroud)
正如其他人指出的那样,你的数组正在衰减为指针.衰减是来自C的历史人工制品.要做你想要的,传递数组作为参考并推导出数组大小:
template<size_t X>
void print(int (&ia)[X])
{
int *p = begin(ia);
while(p != end(ia))
cout<<*p++<<'\t';
}
print(ia);
Run Code Online (Sandbox Code Playgroud)