在C#中,C++是否有像List 这样的东西?
其实答案
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>
类。
.NET中的列表不是链接列表。您正在查找的数据结构是一个可调整大小的数组。
std::vector<std::string> list;
C++有std::vector
模板类,它对应于C#的List
。它也有与C#SingleLinkedList
对应的std::list
模板。
必须准备在C++ vector
和list
项目的调用拷贝构造函数中。所以,对于每个字符串,你都会创建一个副本。
因此,如果你在内存上有限制,或者如果你想在多个集合中存储相同的字符串,最好使用std::vector<std::string*>
或std::vector<char*>
而不是std::vector<string>
。
'std :: list'是一个双链表,而不是单链表。 – Xeo 2011-06-12 07:06:36
当然,但BCL没有双链表,STL也没有单链表。我的意思是现有的类在保证插入/删除时间方面是相似的。感谢您的更正。 – 2011-06-12 07:09:04
有一个指针容器是不明智的,因为这样的东西本质上不是例外的安全。在大多数情况下,无论如何这种事情都是不必要的,而在这样的事情可能有必要的地方,几乎总是有更好的解决方案。 – 2011-06-12 07:09:31
请注意,“泛型”在C++中通常被称为“模板”。如果您需要它们,标准模板库也会提供列表以外的许多容器。 – 2011-06-12 07:00:27
@Jeff:不是,它的'std :: list'。 – Nawaz 2011-06-12 07:00:27
尽管有'std :: list <:string>'你可能会想要使用'std :: vector',或者如果它是静态的'std :: array' – 2011-06-12 07:01:04