C 中等效的 Python 列表?

新手上路,请多包涵

你能告诉我 C++ 中最接近 python 列表的数据类型是什么吗?如果没有类似的东西,你将如何用 C++ 构建它?

原文由 gen 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 464
2 个回答

如果您正在寻找 C++ 惯用的标准一维数据结构, std::vector s、 std::list s 和 数组(或 std::array s)类似于 Python 列表。您要选择哪种数据结构取决于您的要求。 std::vector 是一个非常合理的结构,如果您只是想存储一组项目,则默认使用该结构。

这些数据结构都要求每个元素的类型相同。通常在 C++ 中,这就是你想要的。但是,如果您特别希望在同一结构中存储多种类型,则有以下几种选择:

  1. 您可以存储 void 指针。但是,您将需要一些方法来确定每个元素的类型并将指针转换为适当的类型以使用每个元素。
  2. 如果您想要存储一组特定的类型,您可以声明 union (您通常将其包装在 struct 以及 enum 指示正在存储的类型)。

原文由 Eric Finn 发布,翻译遵循 CC BY-SA 4.0 许可协议

也许将 boost::any 存储在 std::vector 中? 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;
}

原文由 Korchkidu 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题