Artigo Diretório
Link especial do blog
Blog de exercícios pós-aula da Universidade de Pequim C ++ POJ Registro completo da solução
Título original
#include <iostream>
using namespace std;
template <class T>
struct GoodCopy {
// 在此处补充你的代码
};
int a[200];
int b[200];
string c[200];
string d[200];
template <class T>
void Print(T s,T e) {
for(; s != e; ++s)
cout << * s << ",";
cout << endl;
}
int main()
{
int t;
cin >> t;
while( t -- ) {
int m ;
cin >> m;
for(int i = 0;i < m; ++i)
cin >> a[i];
GoodCopy<int>()(a,a+m,b);
Print(b,b+m);
GoodCopy<int>()(a,a+m,a+m/2);
Print(a+m/2,a+m/2 + m);
for(int i = 0;i < m; ++i)
cin >> c[i];
GoodCopy<string>()(c,c+m,d);
Print(c,c+m);
GoodCopy<string>()(c,c+m,c+m/2);
Print(c+m/2,c+m/2 + m);
}
return 0;
}
Análise de citações futuras
Como também
sou um iniciante em C ++, é inevitável que haja vários problemas, e não consigo entender alguns lugares. Por exemplo, para essas duas perguntas, não consigo entender dois lugares e fico preso a noite toda e isso manhã.
A análise aqui é apenas para minha raiva. Não consigo entender por que está escrito assim.
Se houver um erro, saliente que, de fato, existem vários parênteses que me fazem sentir muito abrupto.
GoodCopy<int>()(a,a+m,b);
Meu entendimento atual é que existe um colchete GoodCopy () aqui porque ele chama a função padrão para
gerar um objeto temporário porque nossos colchetes precisam gerar um objeto temporário antes de podermos usar ()
E se não adicionarmos parênteses, não temos nem parênteses para sobrecarregar o objeto, e não podemos usá-lo.
Código
public:
void operator()(const T* startptr,T* endptr,T* setptr)
{
T* temp = endptr-1;
setptr += (endptr - startptr-1);
for(;temp >= startptr;temp--,setptr--)
*setptr = *temp;
}