在C#中,C++是否有像List 这样的东西?

在C#中,C++是否有像List <string>这样的东西?

问题描述:

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 <:string>'你可能会想要使用'std :: vector',或者如果它是静态的'std :: array' – 2011-06-12 07:01:04

其实答案

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 <:string>'。 – Sven 2011-06-12 07:09:13

.NET中的列表不是链接列表。您正在查找的数据结构是一个可调整大小的数组。

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

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