t():
如果t代表的是內建型別, t()代表的是 0
如果t代表的是自定義型別,那麼t()代表的就是呼叫這種型別的無參建構函式
erase()函式用迭代器引數,刪除元素之後又會返回乙個迭代器,按道理來說迭代器不應該失效的,但是stl讓迭代器失效了,這樣做的目的就是,假如你刪的是最後乙個元素,尾位置只需要前移,這樣的話,迭代器就失效了。
一般我們看stl的原始碼看的都是sgi版本的因為,sgi版本的**可讀性更高,而pj版本的可讀性太低了
vecto有乙個缺點就是在任意位置的插入刪除效率比較低
#include
#include
using
namespace std;
namespace n1
vector
(int n,
const t& data)
:_begin
(new t[n]
) _end = _begin + n;
_endofstorage = _end;
}template
<
class
iterator
>
//任意型別區間
vector
(iterator first, iterator end)
_begin =
new t[length]
;for
(int i =
0; i < length;
++i)
_end = _begin + length;
_endofstorage = _end;
}vector
(vector
& data)
_end = _begin + si;
_endofstorage = _end;
} vector
&operator
=(vector
& data)
//賦值運算子裡面我給出了兩步操作
int si = data.
size()
; _begin =
new t[si]
;for
(int i =
0; i < si;
++i)
_end = _begin + si;
_endofstorage = _end;
return
*this;}
~vector()
} iterator begin()
iterator end()
void
resize
(int newsize,
const t& data =t(
))} _end = _begin + newsize;
}void
reserve
(int newcapacity)
delete
_begin;
} _begin = temp;
//_end = _begin + size(); 這樣寫有坑,必須要在之前的位置將size()儲存起來,因為擴容結束,_begin只向新空間,_end依然在舊空間,相減無意義,但是+在_end上無意義,執行會出錯
_end = _begin + n;
_endofstorage = _begin + newcapacity;}}
const t&
operator
(int n)
const
t&operator
(int n)
t&front()
const t&
front()
const
t&back()
const t&
back()
const
void
push_back
(const t& data)
void
pop_back()
iterator insert
(iterator pos,
const t& data)
//返回值意思是剛插入元素的位置
*pos = date;
_end++
;//標記尾部的標記後移
return pos;
} iterator erase
(iterator pos)
--_end;
標記尾部的標記前移
return pos;
}int
size()
intcapacity()
bool
empty()
void
clear()
private
: t* _begin;
//標記起始位置
t* _end;
//標記有效元素末尾
t* _endofstorage;
//標記空間末尾
void
check()
}};void
test()
; vector<
int>
v3(a, a +
(sizeof
(a)/
sizeof
(a[0])
)); vector<
int>
v4(v3)
; vector<
int> v5;
v5 = v4;
cout << v1.
size()
<< endl;
cout << v1.
capacity()
<< endl;
cout << v2.
size()
<< endl;
cout << v2.
capacity()
<< endl;
cout << v3.
size()
<< endl;
cout << v3.
capacity()
<< endl;
cout << v4.
size()
<< endl;
cout << v4.
capacity()
<< endl;
cout << v5.
size()
<< endl;
cout << v5.
capacity()
<< endl;
auto it = v3.
begin()
;while
(it != v3.
end())
cout << endl;
cout << v3.
front()
<< endl;
cout << v3.
back()
<< endl;
}void
test1()
cout << endl;
v1.pop_back()
; v1.
pop_back()
; v1.
pop_back()
;auto it2 = v1.
begin()
;while
(it2 != v1.
end())
cout << endl;}}
using
namespace n1;
intmain()
C 小工修煉手冊 (模板 STL簡介)
導致記憶體洩露的常見場景有哪些 1.在申請空間之後忘記釋放空間,這樣的話就會導致記憶體洩露 2.一些誤操作,比如淺拷貝問題,兩個指標指向一塊空間,但是其中乙個指標的空間未被釋放 3.異常安全問題,在空間未釋放之前就被異常捕獲,而去執行其他 沒有釋放空間 記憶體洩漏的危害 長期執行的程式 出現記憶體洩...
使用C 實現Vector
最近開始學習資料結構與演算法了,使用的是weiss的資料結構與演算法c 描述,第三版和第四版。其中第四版已經全部用c 11的標準重寫了。感覺我自己寫的時候有點糾結到底用c 老的標準還是c 11的標準,哈哈,選擇困難!今天我主要用c 老的標準寫了vector類,因此沒有實現移動建構函式和移動拷貝函式。...
C 模式實現vector
include include include using namespace std namespace my vector 2.c 11構造 以列表初始化 比如乙個array,乙個list vector initializer list il start nullptr finish nullp...