1. 程式人生 > >C++ 模板動態記憶體分配經典練習

C++ 模板動態記憶體分配經典練習

補充下列程式碼,使得程式能夠按要求輸出

#include <iostream>
#include <cstring> 
#include <vector>
#include <cstdio> 
using namespace std;
// 在此處補充你的程式碼
int  a[40];
int main(int argc, char** argv) {
	int t;
	scanf("%d",&t);
	while ( t -- ) {
		int m;
		scanf("%d",&m);
		for (int i = 0;i < m; ++i) 
			scanf("%d",a+i);
		char s[100];
		scanf("%s",s);
		CMyClass<int> b(a, m);
		CMyClass<char> c(s, strlen(s));
		printf("%d %c\n", b[5], c[7]);
	}
	return 0;
}

輸入

第一行是整數t表示資料組數 
每組資料有兩行 
第一行開頭是整數m,然後後面是m個整數(5 < m < 30)
第二行是一個沒有空格的字串,長度不超過50

輸出

對每組資料 先輸出m個整數中的第5個,然後輸出字串中的第7個字元。
"第i個"中的 i 是從0開始算的。

樣例輸入

1
6 1 3 5 5095 8 8
helloworld

樣例輸出

8 r

這是一個深拷貝的例子

#include <iostream>
#include <cstring> 
#include <vector>
#include <cstdio> 
using namespace std;
template<class T>
class CMyClass
{
private: 
	T *p;
public:

	CMyClass(T *s, int n)
	{
		if (p)
			delete[] p;
		p = new T[n + 1];
		for (int i = 0; i < n; i++)
		{
			p[i] = *s;
			s++;
		}
		
	}

	T operator[](int x)
	{
		return *(p + x);
	}

	
};
int  a[40];
int main(int argc, char** argv) {
	int t;
	scanf("%d",&t);
	while ( t -- ) {
		int m;
		scanf("%d",&m);
		for (int i = 0;i < m; ++i) 
			scanf("%d",a+i);
		char s[100];
		scanf("%s",s);
		CMyClass<int> b(a, m);
		CMyClass<char> c(s, strlen(s));
		printf("%d %c\n", b[5], c[7]);
	}
	return 0;
}