我想實現一個C++程序,給定一個元素列表,打印出列表中的獨特元素。C++ - 幫助理解功能和類模板之間的差異
我知道C比C++好很多,但我現在開始在C++ 上實際上只有(編碼)。
我只讀過C++概念,模板是什麼,我對函數模板感到滿意,但是我只是讀了類模板,我想我對使用哪一個應用感到困惑到下面的場景。
這是我到目前爲止已經寫(*注意:函數isUnique設置應該是做別的事情,但現在我正在寫裏面只是覈實的行動爲):
cppArrays.h
#include <iostream>
#include <cstdlib>
#include <vector>
#include <string>
using namespace std;
template <class T> class cpparray{
private:
int size;
vector<T> elems;
public:
cpparray(int);
~ cpparray();
int isUnique(T arr);
};
template <class T> cpparray<T>::cpparray(int size)
{
vector<T> elems(size);
cout << "Object created with size " << elems.size()<< "\n"<< endl;
}
template <class T> cpparray<T>::~cpparray()
{
cout << "Object del\n" << endl;
}
template <class T> int cpparray<T>::isUnique(T arr)
{
return arr.size();
}
cppArrays.cc
#include "cppArrays.h"
int main()
{
cpparray<int> a(10) ;
//a.push_back(1);
//a.push_back(2);
//cout << a.size() << a.begin() << a.end() << endl;
int b = isUnique(a);
return 0;
}
詳細:
[1]我試圖使用模板,因爲我希望我矢量能夠與任何數據類型被實例化 - 炭/浮點/ INT。
[2]餘認識到,在使用類模板,通過調用
cpparray<int>a(10);
我最終聲明一個對象類的一個「cpparray」,其類型爲整數。它是否正確? 如果是,那麼a.push_back(1)
將無法正常工作,因爲它沒有引用成員變量,但對象本身,因此它是可以理解的我會得到一個編譯時錯誤沒有成員名爲push_back在cpparray。
但是,這使它更難我
[1]瞭解什麼時候使用類模板,而不是功能模板,
[2]如何初始化此矢量在模板類和工作與它,給我的目標?
'push_back'應該存在作爲array'的'的成員函數。然後[this](http://stackoverflow.com/questions/926752/why-should-i-prefer-to-use-member-initialization-list)。你的構造函數中的elems是一個本地實例。 – LogicStuff
正確。但我試圖使用std容器向量,但我搞亂了我嘗試推廣類數組以處理任何類型的數據向量的部分。 – Raaj
我想說的是,在初始化嘗試的情況下,你會搞砸C++入門書中模板之前的部分。並要求*「類模板vs函數模板」*有點像*「class vs function」*。 – LogicStuff