请问您能告诉我C ++中最接近python列表的数据类型是什么?如果没有类似的东西,你会如何用C ++构建它?
答案 0 :(得分:9)
std::vector
s,std::list
和arrays(或std::array
s)都具有与Python列表类似的功能。您要选择哪种数据结构取决于您的要求。
答案 1 :(得分:5)
也许在std :: vector中存储boost :: any? http://www.boost.org/doc/libs/1_54_0/doc/html/boost/any.html
这是一个简单的工作示例。请参阅下面的詹姆斯评论。
#include "../boost_1_54_0/boost/any.hpp"
#include <vector>
#include <string>
#include <iostream>
int main()
{
std::vector<boost::any> myList;
myList.push_back(std::string("Hello"));
myList.push_back(10);
myList.push_back(std::string("World"));
std::string any1 = boost::any_cast<std::string> (myList[0]);
int any2 = boost::any_cast<int> (myList[1]);
std::string any3 = boost::any_cast<std::string> (myList[2]);
std::cout<<any1<<" "<<any2<<" "<<any3<<std::endl;
return 0;
}
答案 2 :(得分:3)
实际上没有C ++容器等同于Python的列表,这部分是C ++和Python非常不同的对象模型的结果。特别是,建议和upvoted std :: list是恕我直言,甚至不接近Python的列表类型,我宁愿建议std :: vector或者std :: deque。也就是说,目前尚不清楚你想要的究竟是什么,以及如何“建立它”在很大程度上取决于“它”到底是什么,即你对容器的期望。
我建议你看看C ++容器std :: vector,std :: deque和std :: list来概述。然后看看像Boost.Any和Boost.Variant这样的东西,你可以将它们与它们结合起来,也许也是智能指针和Boost.Optional之一。最后,查看Boost.Container和Boost.Intrusive。如果这些不太可能的情况都不能提供合适的近似值,那么您需要更好地解释您的实际目标。
答案 3 :(得分:2)
没有真正的等价物,而且非常困难 提供一个。 Python和C ++完全不同 语言,并提供一个真的没有多大意义 C ++的上下文。最重要的区别在于 Python中的所有内容都是动态分配的,并且是一个 “对象”,Python使用duck typing。
FWIW:C ++中提供的一个非常早期的库(模板之前)
Object*
的容器,其中派生类为int
个框,
double
等。实际经验表明它很快
不是一个好主意。 (我很好奇:还有其他人吗?
记住它?特别是,它究竟是什么
被称为NHS的东西,但我不记得了。)
答案 4 :(得分:1)
我正在研究std :: vector的包装器,使其更像Python的名为pylistpp的列表。 API就像Python一样。例如:
#include <list.hpp>
#include <iostream>
int main()
{
list<int> mylist;
mylist.append(5);
mylist.append(7);
int count = mylist.count(5);
std::cout << count << std::endl;
std::cout << mylist.pop(0) << std::endl;
std::cout << mylist.index(7);
return 0;
}