stl共性機制 與容器中的深拷貝與淺拷貝問題

2021-08-19 09:28:04 字數 1031 閱讀 6006

stl共性拷貝機制

stl元素放入容器 是拷貝進行的 是值寓意 而非引用寓意,

也就是說當我們給容器插入元素的時候,容器內部實施拷貝動作。

將我們要插入的元素再另行拷貝乙份放入到容器中,而不是將原資料元素直接放進容器中,

也就是我們提供的元素必須能被拷貝。

解決方法   加入拷貝建構函式

1 除了queue 和stack 之外,每個容器都提供可返回迭代器的函式,

運用返回的迭代器可以訪問元素

2 通常stl不會丟擲異常 需要使用者傳入正確引數

3 每個容器提供乙個預設的拷貝函式 和 預設的拷貝建構函式

4 大小相關的構造方法 1 size()返回容器中的元素的個數 2 empty()判讀容器是否為空

未加入拷貝建構函式前 

加入拷貝建構函式後

**如下

class teacher

//拷貝構造 如果沒有這個程式容易崩潰

teacher(const teacher& t)

//過載=

teacher& operator=(teacher& t)

this->name = new char[len];

strcpy(this->name, t.name);

this->age = t.age;

return *this;

} ~teacher()

this->age = 0;

} char* name;

int age;

};//測試函式 深拷貝和淺拷貝 程式在執行完test 會釋放掉 會呼叫析構函式

void test01()

int main()

C 容器之淺拷貝與深拷貝

二 深拷貝 淺拷貝不開闢新空間,只增加乙個指標,指向原有的記憶體。析構函式 person private char mname 指標 容易淺拷貝的問題 int mage void test01 intmain void 程式執行出錯 因為,發生了淺拷貝,p 和 vperson兩個物件指標指向同一塊記...

STL容器與拷貝建構函式

所有容器提供的都是 value語意 而非 reference語意 容器內進行元素的安插操作時,內部實施的是拷貝操作,置於容器內。因此stl容器 的每乙個元素都必須能夠拷貝。以vector為例,往vector中 實際上所有stl容器都是這樣 放元素,vector會呼叫元素類的拷貝建構函式生成的副本,當...

python 中的拷貝 淺拷貝與深拷貝

0.序列指什麼?序列型別是指容器內的元素從0開始的索引順序訪問,一次可以訪問乙個或者多個元素,包括字串 string 元組 tuple 列表 list the difference between tuple and list tuple would not be changed,but list ...