C ++オブジェクト指向プログラミング034:goodcopy ----(北京大学Mooc)


特別ブログリンク

北京大学C ++ POJ授業後演習ブログ完全なソリューション記録


元のタイトル

ここに画像の説明を挿入

#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;
}

前方引用分析


もC ++の初心者なので、いろいろな問題が発生することは避けられず、場所によっては理解できません。たとえば、この2つの質問では、2つの場所が理解できず、一晩中行き詰まってしまいます。朝。

ここでの分析は私の怒りのためだけです。なぜこのように書かれているのか理解できません。
間違いがある場合は、実際に複数の括弧があり、非常に突然に感じていることを指摘してください。

GoodCopy<int>()(a,a+m,b);

私の現在の理解では、
()を使用する前にブラケットが一時オブジェクトを生成する必要があるため、デフォルト関数を呼び出して一時オブジェクト生成するため、ここにブラケットGoodCopy()があります。

また、括弧を追加しないと、オブジェクトをオーバーロードするための括弧すらなく、使用できません。


コード

    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;
    }

おすすめ

転載: blog.csdn.net/qq_37500516/article/details/115015945