vector和list的使用

2021-08-08 15:14:01 字數 2971 閱讀 8835

vector和list的區別

1.在儲存中 vector是連續儲存的;list中的物件不一定是連續儲存的。

2.list如果要隨機訪問某個元素需要遍歷list,沒有效率。vector過載了[ ]可以直接訪問。

3.在list中插入元素,尤其是在首尾插入元素,效率很高,只需要改變元素的指標,但是vector要隨機插入或刪除資料需要前移或者後移,記憶體塊的拷貝,另外,當該陣列後的記憶體空間不夠時,需要重新申請一塊足夠大的記憶體並進行記憶體的拷貝,開銷比較大。

4.list是雙向的,而vector是單向的。

建議:如果是是大量的插入和刪除應使用list,少量的資料如果進行插入和刪除用vector。

myvector的實現

template

t>

class

vector

~vector

()

}vector

(int

n, const

t& data = t())

:_start(null)

, _finish(null)

, _endofstorage(null)

_finish = _start + n;

_endofstorage = _finish;

}void pushback

(const

t& x)

vector

(const

vector

& v)

:_start(0)

, _finish(0)

, _endofstorage(0)

_finish = _start + v.size

(); _endofstorage = _finish;

}void popback

()

}void popfront

()

}iterator

erase

(iterator

pos)

--_finish;

--pos;

return pos;

}void insert

(iterator& pos,const

t& x)

pos=_start+n;

for(iterator

end=end();end!=pos;--end)

*pos=x;

++_finish;

}iterator

end()

iterator

begin

()

inline size_t size

()

inline size_t capacity

()

void expand

(size_t

n)//增容

delete _start;

_start=tmp;

_finish=_start+size;

_endofstorage=_start+n;}}

t& operator(size_t

pos)

t& operator(size_t

pos) const

protected:

iterator _start;

iterator _finish;

iterator _endofstorage;

};void test1()

cout::iterator pos=v.begin

();

();

(); v.erase

(pos+2);

vector

::iterator it1=v.begin

();//迭代器實現

while(it1!=v.end())

cout<

mylist

#include 

using

namespace

std;

template

struct listnode //--------雙向鍊錶節點

t _data;

listnode* _next;

listnode* _prev;

};template

struct _iterator//迭代器的過載

ref operator*()// 過載解引用

self& operator++()// ++過載

bool

operator!=(const self& other)const

// !=過載

node* _node;

};template

class list

~list()

node* newnode(const t& x)// 傳值

node* newnode()// 用於head傳值

void pushback(const t& x)

iterator begin() //定義返回迭代器型別的begin()和end()

iterator end()

constiterator begin()const

constiterator end()const

void release() // 釋放

}iterator erase(iterator it)// 刪除

void popback()

void remove(int pos)// 指定位置刪除

}protected:

node* _head;

};void test2()

list::iterator it=l.begin();

while(it!=l.end())

cout

<}

vector和list的使用

1.vector為儲存的物件分配一塊連續的位址空間,因此對vector中的元素隨機訪問效率很高。在vecotor中插入或者刪除某個元素,需要將現有元素進行複製,移動。如果vector中儲存的物件很大,或者建構函式複雜,則在對現有元素進行拷貝時開銷較大,因為拷貝物件要呼叫拷貝建構函式。對於簡單的小物件...

vector和list的使用

stl是standard template library的簡稱,中文名是標準模板庫。從根本上說,stl是一些容器和演算法的集合。stl可分為容器 containers 迭代器 iterators 空間配置器 allocator 配接器 adapters 演算法 algorithms 仿函式 fun...

list和vector的區別

vector和built in陣列類似,它擁有一段連續的記憶體空間,並且起始位址不變,因此它能夠非常好的支援隨機訪問,即操作符,但由於它的記憶體空間是連續的,所以在中間進行插入和刪除會造成記憶體塊的拷貝。另外,當該陣列後的記憶體空間不夠時,需要重新申請一塊足夠大的記憶體並進行記憶體的拷貝。這些都大大...