C++ 错误:在‘;之前应为主表达式;模板&x2019;具有算法的复制功能

C++ 错误:在‘;之前应为主表达式;模板&x2019;具有算法的复制功能,c++,arrays,algorithm,c++11,C++,Arrays,Algorithm,C++11,我在ostream_迭代器上出错。我想保留T作为模板。但在这一点上,它给出了错误。请帮帮我 #include <iostream> #include <fstream> #include <algorithm> #include <iterator> using namespace std; int main(void){ int arr[] = {2, 5, 7, 90, 70}; int *ptr = arr; char* str = "m

我在ostream_迭代器上出错。我想保留T作为模板。但在这一点上,它给出了错误。请帮帮我

#include <iostream>
#include <fstream>
#include <algorithm>
#include <iterator>
using namespace std;

int main(void){
int arr[] =  {2, 5, 7, 90, 70};
int *ptr = arr;
char* str = "mudit";
int n = sizeof(arr)/sizeof(arr[0]);
cout.write (str, 5); 
cout << endl;
//printing the array in one line.
copy(arr,arr+n,template<class T> ostream_iterator<T>(cout, "\n")); //Getting 
//error at this line.
//cout << copy(arr, arr+n) << endl;
int x = 7;
//cout << "Searching " << x << " position is at : " << search(arr, n, 
sizeof(int), &x, compare) << endl;
return 0;
}
#包括
#包括
#包括
#包括
使用名称空间std;
内部主(空){
int arr[]={2,5,7,90,70};
int*ptr=arr;
char*str=“mudit”;
int n=sizeof(arr)/sizeof(arr[0]);
会写(str,5);

cout您应该通过以下方式将
ostream\u interator
传递到sopy函数:

 copy(arr, arr + n, ostream_iterator<int>(cout, "\n"));
copy(arr,arr+n,ostream\u迭代器(cout,“\n”);

下面这一行是无效的
C++
就这么简单

copy(arr,arr+n,模板ostream\u迭代器(cout,“\n”);

所有编译器都会抱怨以下问题:

error: expected an expression
         template <class T> ostream_iterator<T>(cout, "\n"));
请注意,我已经删除了
\n
,因为注释中说您希望在一行中打印所有内容

您可以将其模板化,创建如下函数

template< typename T,typename Iterator>
void mycopy_ostream_iterator(Iterator start, Iterator end){
  copy(start, end, ostream_iterator<T>(cout, " "));  // Getting
} 
模板
void mycopy_ostream_迭代器(迭代器开始、迭代器结束){
复制(开始、结束、ostream_迭代器(cout,“”);//获取
} 
然后按如下方式使用它(注意,Iter的类型可以由编译器推断)

mycopy\u ostream\u迭代器(arr,arr+n);

请附上编译器输出的相关错误消息作为我的编辑,我想提醒他们,
T
甚至可以从
Iterator
推断
T
根本不需要。
复制(开始,结束,ostream\u Iterator(cout,”)
@DavideSpataro-Thanx提供帮助。基本上我想在一行中打印数组。就像我们在python中所做的那样。但我想知道为什么我们不能将模板与ostream_迭代器一起应用?有什么具体原因吗?我知道。我基本上是在寻找模板版本。Davide对此做出了回应。
  // printing the array in one line.
  copy(arr, arr + n, ostream_iterator<int>(cout, " ")); 
template< typename T,typename Iterator>
void mycopy_ostream_iterator(Iterator start, Iterator end){
  copy(start, end, ostream_iterator<T>(cout, " "));  // Getting
} 
mycopy_ostream_iterator<int>(arr, arr + n);