C 中List的淺複製和深複製

2021-07-10 07:09:28 字數 1258 閱讀 2169

今天在遊戲中碰到乙個排序問題,就是有乙個裝備列表,是和伺服器完全一致的,各種協議需要用到裝備在這個列表中的序號。但是介面顯示的時候需要按照各種方式來排序,但是不能在原來的列表上排序。因此需要複製出乙個列表來,但是如何去複製這個列表,既能實現排序之後不會影響源列表,又要在排序之後,可以從原列表中找到裝備的序號。所以順便整理了下list的各種複製的區別。

源列表是list< t >

淺複製:

- list< t > oldlist = new list< t >();

- oldlist.add(..);

- list< t > newlist = oldlist;

深複製:

- list< t > oldlist = new list< t >();

- oldlist.add(..);

- list< t > newlist = new list< t >(oldlist);

t是引用或者是類的例項

注意用list newlist = oldlist;這種方法不是複製,而是新增了乙個引用;

淺複製:

1. - list< t > oldlist = new list< t >();

- oldlist.add(..);

- list< t > newlist = new list< t >(oldlist);

2. - list< t > oldlist = new list< t >();

- oldlist.add(..);

- list< t > newlist = oldlist.copyto();

3. -list< t > oldlist = new list< t >();

- oldlist.add(..);

- list< t > newlist = oldlist.copyto();

以上方法都可以實現類似的效果,並且複製出來的列表中的項,可以在源列表中用indexof之類的方法找到,所以這些也是遊戲中可以用的方法,當然還有tolist()這樣轉換成陣列的方法。除了這種複製之外,也可以用dictionary來儲存原來的鍵值,做乙個對應。

深複製:

1. - static class extensions

- - //當然前題是list中的物件要實現icloneable介面

- }2.也可以用序列化反序列化的方法實現深度複製,見之前的文章。

深度複製可以完全複製出乙個新的列表,用這種方法複製出來的列表裡的項,是不能在原列表中找到的。

C 中深複製和淺複製

c 支援兩種型別 值型別 和 引用型別 值型別 value type 如 char int 和 float 列舉型別和結構型別。引用型別 reference type 包括類 class 型別 介面型別 委託型別和陣列型別。如何來劃分它們?以它們在計算機記憶體中如何分配來劃分 值型別與引用型別的區別...

C 中的深複製和淺複製

c 支援兩種型別 值型別 和 引用型別 值型別 value type 如 char int 和 float 列舉型別和結構型別。引用型別 reference type 包括類 class 型別 介面型別 委託型別和陣列型別。如何來劃分它們?以它們在計算機記憶體中如何分配來劃分 值型別與引用型別的區別...

淺複製和深複製

在c 中,下面三種物件需要呼叫拷貝建構函式 有時也稱 複製建構函式 1 乙個物件作為函式引數,以值傳遞的方式傳入函式體 全域性函式,傳入的是物件 void g fun resume c 2 乙個物件作為函式返回值,以值傳遞的方式從函式返回 全域性函式 返回的是物件 resume g fun 3 乙個...