2011-06-12 51 views
8

C++有沒有像C#中的List<>?類似於List<string>用於存儲字符串數組。在C#中,C++是否有像List <string>這樣的東西?

+0

請注意,「泛型」在C++中通常被稱爲「模板」。如果您需要它們,標準模板庫也會提供列表以外的許多容器。 – 2011-06-12 07:00:27

+0

@Jeff:不是,它的'std :: list'。 – Nawaz 2011-06-12 07:00:27

+0

儘管有'std :: list '你可能會想要使用'std :: vector',或者如果它是靜態的'std :: array' – 2011-06-12 07:01:04

回答

19

其實答案

std::vector<std::string> 

std::list是一個鏈表,並不像C#的List<T>類的數組。

E.g.

#include <iostream> // iostream is for cout and endl; not necessary just to use vector or string 
#include <vector> 
#include <string> 
using namespace std; 

int main() 
{ 
    vector<string> list; 
    list.push_back("foo"); 
    list.push_back("bar"); 
    for(vector<string>::const_iterator it = list.begin(); it != list.end(); ++it) 
     cout << *it << endl; 

    return 0; 
} 

std::list的類實際上是等同於C#的LinkedList<T>類。

+0

矢量不在vs中,我應該使用什麼標題? – Ata 2011-06-12 07:06:13

+0

@Ata:'#include '? – Xeo 2011-06-12 07:06:58

+0

您需要'#include '和'#include '(對於'std :: string')。此外,除非在C++文件的頂部使用'namespace std;',否則您需要明確限定類型爲'std :: vector '。 – Sven 2011-06-12 07:09:13

7

.NET中的列表不是鏈接列表。您正在查找的數據結構是一個可調整大小的數組。

std::vector<std::string> list; 
0

C++有std::vector模板類,它對應於C#的List。它也有與C#SingleLinkedList對應的std::list模板。

必須準備在C++ vectorlist項目的調用拷貝構造函數中。所以,對於每個字符串,你都會創建一個副本。

因此,如果你在內存上有限制,或者如果你想在多個集合中存儲相同的字符串,最好使用std::vector<std::string*>std::vector<char*>而不是std::vector<string>

+0

'std :: list'是一個雙鏈表,而不是單鏈表。 – Xeo 2011-06-12 07:06:36

+0

當然,但BCL沒有雙鏈表,STL也沒有單鏈表。我的意思是現有的類在保證插入/刪除時間方面是相似的。感謝您的更正。 – 2011-06-12 07:09:04

+2

有一個指針容器是不明智的,因爲這樣的東西本質上不是例外的安全。在大多數情況下,無論如何這種事情都是不必要的,而在這樣的事情可能有必要的地方,幾乎總是有更好的解決方案。 – 2011-06-12 07:09:31

相關問題