C 用模板實現順序表Vector

2021-08-10 09:10:24 字數 3470 閱讀 9356

#include以包含所需要的類檔案vector,還有一定要加上using namespace std。用模板寫函式或類都與型別無關,因此,stl中都是用模板實現容器,下面我們來介紹用模板實現順序表。

#pragma once

#include#includeusing namespace std;

typedef int datatype;

class vector

// 有n個值為data的元素

vector(size_t n, const datatype& data)

vector(const vector& v)

: _capacity(v._capacity)

, _size(v._size)

vector& operator=(const vector& v)

delete _pdata;

_pdata = temp;

_capacity = v._capacity;

_size = v._size;

} return *this;

} ~vector() }

//功能函式

void pushback(const datatype& data);

void popback();

void insert(size_t pos, const datatype& data);

void erase(size_t pos);

int find(const datatype& data)const;

void clear();

size_t size()const;

void resize(size_t size, const datatype& data = datatype());

size_t capacity()const;

bool empty()const;

datatype& front();

const datatype& front()const;

datatype& back();

const datatype& back()const;

void assign(size_t n, const datatype& data = datatype());

datatype& operator(size_t index);

const datatype& operator(size_t index)const;

datatype& at(size_t n);

const datatype& at(size_t n)const;

void printvector();

private:

//檢查容量是否已滿

void checkcapacity()

delete _pdata;

_pdata = temp;

_capacity *= 2;

} }friend std::ostream& operator<<(std::ostream& _cout, const vector& v);

private:

datatype* _pdata;

size_t _capacity;

size_t _size;

};void vector::printvector()

cout << endl;

}//尾插函式

void vector::pushback(const datatype& data)

//尾刪

void vector::popback()

}//任意位置的插入函式

void vector::insert(size_t pos, const datatype& data)

_pdata[pos - 1] = data;//將data賦給第pos個元素

_size++;

}//刪除

void vector::erase(size_t pos)

_size--; }}

//查詢

int vector::find(const datatype& data)const

} return 0;//沒找到,返回0

}//清空

void vector::clear()

}//有效元素個數

size_t vector::size()const

//改變vector中_size的大小

void vector::resize(size_t size, const datatype& data)

//預設引數都是在宣告時定義的,定義的時候不能有,否則會造成重定義的問題

else if (size>_size)

else

}checkcapacity();

for (int i = _oldsize; i < _size; i++)

}}//容量

size_t vector::capacity()const

//判空函式

bool vector::empty()const

//第乙個元素

datatype& vector::front()

const datatype& vector::front()const//常物件呼叫

//最後乙個元素

datatype& vector::back()

const datatype& vector::back()const

//的過載函式

datatype& vector::operator(size_t index)

const datatype& vector::operator(size_t index)const

//返回乙個引用位置為n的元素

datatype& vector::at(size_t n)

const datatype& vector::at(size_t n)const

void funtest1()

void funtest2()

int main()

以上就是模板實現順序表,部分注釋已經在**出給出。通過使用模板實現vector可以提高**的復用度,vector之所以被認為是乙個容器,是因為它能夠像容器一樣存放各種型別的物件,簡單地說,vector是乙個能夠存放任意型別的動態陣列,能夠增加和壓縮資料。vector是一塊連續分配的記憶體,從資料安排的角度來講,和陣列極其相似,不同的地方就是:陣列是靜態分配空間,一旦分配了空間的大小,就不可再改變了;而vector是動態分配空間,隨著元素的不斷插入,它會按照自身的一套機制不斷擴充自身的容量。

而對於模板來說:

【優點】

模板復用了**,節省資源,更快的迭代開發,c++的標準模板庫(stl)因此而產生。

增強了**的靈活性。

【缺點】

模板讓**變得凌亂複雜,不易維護,編譯**時間變長。

出現模板編譯錯誤時,錯誤資訊非常凌亂,不易定位錯誤。

用模板實現順序表Vector

pragma once include using namespace std include template class vector vector const t array,size t size start new t size finish start endofstorage fini...

C 模板實現順序表

pragma once include include include linearlist.h using namespace std const int defaultsize 100 templateclass seqlist public linearlist int size const ...

順序表C 模板實現

include using namespace std const int maxsize 20 template class sqlist template sqlist sqlist template sqlist sqlist template void sqlist creatlist t ...