Directorio de artículos
Enlace de blog especial
Titulo 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álisis de citas hacia adelante
Debido a
que también soy un principiante en C ++, es inevitable que haya varios problemas y no pueda entender algunos lugares. Por ejemplo, para estas dos preguntas, no puedo entender dos lugares y me quedo atascado toda la noche y esto Mañana.
El análisis aquí es solo para mi enojo. No puedo entender por qué está escrito así.
Si hay un error, señale que, de hecho, hay varios paréntesis que me hacen sentir muy abrupto.
GoodCopy<int>()(a,a+m,b);
Mi entendimiento actual es que hay un corchete GoodCopy () aquí porque llama a la función predeterminada para
generar un objeto temporal porque nuestros corchetes necesitan generar un objeto temporal antes de que podamos usar ()
Y si no agregamos paréntesis, ni siquiera tenemos paréntesis para sobrecargar el objeto y no podemos usarlo.
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;
}