C++ 模板動態記憶體分配經典練習
阿新 • • 發佈:2018-11-16
補充下列程式碼,使得程式能夠按要求輸出
#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; }