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