2012-11-14 151 views
2

我來自一個Python的背景,但我對那種在C++標準庫對象和數據結構的讀了,我看到聲明說,字符串的vector矢量對象聲明後的括號是什麼意思?

vector<string> names(10); 

會指示vector對象被初始化爲容納string類型的10個對象。我的問題是:

  • 是否申報<string>部分有一個抽象的C++類的系統,即它是一個在可以使用在類系統的某些特徵的矢量對象或部分建成語法用戶定義的類定義?
  • 我是否正確地認爲名稱後面的括號是傳遞給構造函數的參數?
  • string內置類型,如int或由標準庫定義的對象。因此,內置類型和其他對象之間是否存在差異(例如,所有「類型」都是Python中的對象)?
+3

1.查找模板。是的。 3.這是一個預製課程,不是內置類型。 – chris

回答

3

有兩個種類的參數,以std::vector對象:

  1. 有模板參數它們是std::vector值類型和分配器類型與後者被默認。也就是說,std::vector<std::string>實際上恰好是std::vector<std::string, std::allocator<std::string> >
  2. 有作爲構造函數參數傳遞的運行時參數,std::vector<...>需要這些參數的幾個組合。在上面引用的使用中,10是賦予向量的初始元素的數量。

因此,要回答你的具體問題:

  1. string恰好是std::string,並沒有什麼特別的。您可以使用模擬某些概念的任何用戶定義類型(例如,該類型需要爲CopyConstructible)。
  2. 括號中的參數是構造函數參數(在C++語境中,括號通常是[],但術語不明確)。
  3. string,好吧,實際std::string未定義爲內置類型,但它是標準C++庫中的一種類型。標準C++庫類型如何實現與C++實現相差無幾,但是,實現可以選擇將其內置(只要它仍然可以像類類型一樣使用)。

在C++中,內置類型和類類型之間存在一些差異,但使用C++ 2011時,它能夠創建類似於內置類型的類類型。主要區別在於,可以採用類類型的某些成員的地址,而相同的「成員」對於內置類型不可訪問。另一個區別是,內置類型不需要聲明(實際上,它們不能被聲明),而類類型需要聲明和/或定義(取決於如何使用這些類型)。

相關問題