天天看點

泛型程式設計1.概觀2.Traits3.疊代器4.容器

@講師張文傑—Geekband

泛型程式設計1.概觀2.Traits3.疊代器4.容器

1.概觀

泛型程式設計1.概觀2.Traits3.疊代器4.容器
  • 将型别以一種 to-be-specified-later 方式給出
  • 通過模闆以及相關性質表現的

2.Traits

泛型程式設計1.概觀2.Traits3.疊代器4.容器
泛型程式設計1.概觀2.Traits3.疊代器4.容器
泛型程式設計1.概觀2.Traits3.疊代器4.容器
泛型程式設計1.概觀2.Traits3.疊代器4.容器
泛型程式設計1.概觀2.Traits3.疊代器4.容器
泛型程式設計1.概觀2.Traits3.疊代器4.容器

…實際調試一遍

3.疊代器

  • 分離算法和容器
泛型程式設計1.概觀2.Traits3.疊代器4.容器
泛型程式設計1.概觀2.Traits3.疊代器4.容器
泛型程式設計1.概觀2.Traits3.疊代器4.容器

4.容器

容器的種類

1.vector

2.list

3.deque

4.set and Multiset

5.Map and MultiMap

6.stack

7.Queue

1.vector

泛型程式設計1.概觀2.Traits3.疊代器4.容器
  1. 能夠存放任意型别的動态數組
  2. 一段位址連續的空間
  3. 動态的空間調整
  4. 向vector添加元素
//vector的聲明
#include<vector>
 int main(){
    std::vector v;
}
           
泛型程式設計1.概觀2.Traits3.疊代器4.容器

push_back函數

向vector添加元素的方法,調用該函數,将元素加至其尾部
std::vector<std::wstring> v3;
for(std::size_t i=;i<;i++)
{
    std::wstringstream wss;
    wss<<TEXT("String[")<<i<<TEXT("]"));
    v3.push_back(wss.str());
}
           

empty()函數

size()函數

std::vector<std::wstring> v3;
bool isEmpty = v3.empty();

int array[] = {,,,,,,,,,};
std::vector<int> v(array,array+);
std::size Vsize = v.size();
           

通路vector中的元素

vector::at()

vector:operator[]

泛型程式設計1.概觀2.Traits3.疊代器4.容器
泛型程式設計1.概觀2.Traits3.疊代器4.容器
std::vector<std::wstring> v;
v.reserve();
for(std::size_t i=;i<;i++){
    std::wstringstream wss;
    wss<<TEXT("String[")<<i<<TEXT("]");
    v.push_back(wss.str());
}

try{
    std::wstring wsz1 = v[];
    std::wstring wsz2 = v.at();
}
catch(const std::exception& e){
    Console::WriteLine(ex.what());
}
           
C++裡盡量少用try-catch,開銷大。
泛型程式設計1.概觀2.Traits3.疊代器4.容器
泛型程式設計1.概觀2.Traits3.疊代器4.容器
泛型程式設計1.概觀2.Traits3.疊代器4.容器
泛型程式設計1.概觀2.Traits3.疊代器4.容器
泛型程式設計1.概觀2.Traits3.疊代器4.容器

2.Deque

泛型程式設計1.概觀2.Traits3.疊代器4.容器

3.List

泛型程式設計1.概觀2.Traits3.疊代器4.容器
泛型程式設計1.概觀2.Traits3.疊代器4.容器
  • 調試運作檔案—test_fx
  • 使用list,必須用include,并通過std命名空間去通路

建立List

std::list l; 建立一個T型别的空list

std::list l(n);建立一個容量是n的T型别的list

std::list l(n,x); 建立一個容量是n的T型别的list,初始化為x

std::list copyOfList(l); 建立一個已有list的拷貝

std::wstring array[] = {TEXT(“Str-1”),TEXT(“Str-2”),TEXT(“Str-3”)};

std::list l(array,array+3);

通過一個數組建立一個list

常見操作

泛型程式設計1.概觀2.Traits3.疊代器4.容器
泛型程式設計1.概觀2.Traits3.疊代器4.容器
泛型程式設計1.概觀2.Traits3.疊代器4.容器
泛型程式設計1.概觀2.Traits3.疊代器4.容器
泛型程式設計1.概觀2.Traits3.疊代器4.容器
  • l.remove_if(ContainsString(TEXT(“C++”)));
  • //remove string that contains “C++”
泛型程式設計1.概觀2.Traits3.疊代器4.容器
泛型程式設計1.概觀2.Traits3.疊代器4.容器
泛型程式設計1.概觀2.Traits3.疊代器4.容器
泛型程式設計1.概觀2.Traits3.疊代器4.容器
泛型程式設計1.概觀2.Traits3.疊代器4.容器
泛型程式設計1.概觀2.Traits3.疊代器4.容器