Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C+中的Python列表等价物+;? 你能告诉我C++中最接近Python列表的数据类型吗?如果没有类似的东西,你会如何在C++中构建它? < p>也许存储Booo::STD中的任何一个::向量? _C++_Python_List - Fatal编程技术网

C+中的Python列表等价物+;? 你能告诉我C++中最接近Python列表的数据类型吗?如果没有类似的东西,你会如何在C++中构建它? < p>也许存储Booo::STD中的任何一个::向量?

C+中的Python列表等价物+;? 你能告诉我C++中最接近Python列表的数据类型吗?如果没有类似的东西,你会如何在C++中构建它? < p>也许存储Booo::STD中的任何一个::向量? ,c++,python,list,C++,Python,List,下面是一个简单的工作示例。请参见下面的詹姆斯评论 #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")); myLis

下面是一个简单的工作示例。请参见下面的詹姆斯评论

#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;
}
#包括“./boost_1_54_0/boost/any.hpp”
#包括
#包括
#包括
int main()
{
std::向量myList;
myList.push_back(std::string(“Hello”);
我的列表。向后推(10);
myList.push_back(std::string(“World”);
std::string any1=boost::any_cast(myList[0]);
int any2=boost::any_cast(myList[1]);
std::string any3=boost::any_cast(myList[2]);

标准::couts、s和(或s)所有的都有类似于Python列表的特性。你想选择的数据结构取决于你的需求。

< P>实际上没有C++容器相当于Python的列表,这部分是C++和Python的不同对象模型的结果。st类型,我更倾向于推荐std::vector或std::deque。也就是说,不清楚您到底想要什么,以及如何“构建”它很大程度上取决于“它”到底是什么,即您对容器的期望


我建议你看看C++容器STD::vector,STD::DEQ:STD::清单来概述。然后看看Booost。任何和Booost。变量,你可以与它们结合,也可能是智能指针和Boost。可选的。最后,检查Booost。容器和Boosi.Biffistic。如果不可能的情况下,没有这些。提供一个合适的近似值,你需要更好地解释你的实际目标是什么。

没有真正的等价物,这将是非常困难的 Python和C++是完全不同的 语言,而提供一种语言在实际应用中并没有多大意义 C++的上下文,最重要的区别是 Python中的所有内容都是动态分配的,并且是 “对象”,Python使用duck类型

WiW:一个非常早期的库(在模板之前)提供了C++
Object*
的容器,其派生类位于box
int
中,
double
等。实际经验很快表明 这不是个好主意。(我很好奇:还有其他人吗 还记得吗?特别是,它到底是什么
调用---其中包含NHS,但我记不清更多。)

我正在为std::vector编写一个包装器,使其更像Python的名为的列表。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;
}
#包括
#包括
int main()
{
列出我的清单;
mylist.append(5);
追加(7);
int count=mylist.count(5);

std::cout。请注意,C++的列表实现为双链表,而python列表实现为双链表。您在寻找什么功能???@Korchkidu,好的,使用
std::tuple
。@chris
boost::any
会更接近,除了python元素具有引用语义,即
std::shared\u ptr
。除了那个Pytho之外n使用鸭类型,所以你必须提供<>代码>对象< /> >中的每一个可能的函数,并提供一个默认的实现。更不用说Python支持否定索引,简单和扩展切片,我不知道还有什么。这个问题本质上归结为“什么是C++中Python列表的最佳替换?”。与任何此类问题一样,这要求OP指定“最佳”,或在本例中指定“同等”Python列表可以存储不同类型的元素。“KKKDOKU是真的,但这不是ASK特别要求的。在C++中,特别是作为初学者,这样做是在自找麻烦。除非Gen编辑这个问题,说他们特别要求能存储的东西。任何类型,那么我将把这个问题解释为要求一个随机访问的一维数据结构。@EricFinn他没有特别要求任何东西。大概,他知道关于
std::vector
(谁不知道)“这还不够近。为什么它还不够接近呢?”Eric Why:你会假设吗?你清楚地降低了功能。@ LUK32,因为我觉得ASK要求一种存储C++的习惯的列表。我可以完全回答这个问题,就像写了,链接到,但是。我不认为这对提问者和回答gen想要问的问题会有帮助。别忘了,你可以编写类似于
l2=l1[3:20:2]
的东西来获取范围内的所有其他元素
[3…20)
。负索引从远端索引。Python的切片确实非常强大,您甚至可以使用它们插入或删除元素。但是,思考容器可以做什么或不能做什么是徒劳的,OP需要明确它们到底需要什么。实际上,存储
std::shared\u ptr
,然后创建(模板?)从
对象
派生的包装类会更接近。Python列表元素具有引用语义;
boost::any
值语义。@JamesKanze:是的。的确。谢谢你提供的信息。不过,我不确定他想在Python方向上走多远;)