¿Lista de Python equivalente en C ++?

¿Podría decirme cuál es el tipo de datos más cercano en C ++ a la lista de python? Si no hay nada similar, ¿cómo lo construirías en C ++?

std::vector s, std::list s, y las matrices (o std::array s) tienen características similares a las listas de Python. La estructura de datos que desea elegir depende de sus requisitos.

Quizás almacenando boost :: any in a std vector? http://www.boost.org/doc/libs/1_54_0/doc/html/boost/any.html

Aquí hay un ejemplo simple de trabajo. Ver los comentarios de James a continuación también.

 #include "../boost_1_54_0/boost/any.hpp" #include  #include  #include  int main() { std::vector myList; myList.push_back(std::string("Hello")); myList.push_back(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]); std::cout< 

En realidad, ningún contenedor de C ++ es equivalente a la lista de Python, que es parcialmente el resultado de los muy diferentes modelos de objetos de C ++ y Python. En particular, std :: list sugerido y upvoted no está ni siquiera cerca del tipo de lista de Python, prefiero sugerir std :: vector o quizás std :: deque. Dicho esto, no está claro qué es exactamente lo que desea y cómo “construirlo” depende en gran medida de qué es exactamente “eso”, es decir, lo que espera del contenedor.

Le sugiero que eche un vistazo a los contenedores de C ++ std :: vector, std :: deque y std :: list para obtener una descripción general. Luego observa cosas como Boost.Any y Boost.Variant que puedes combinar con ellas, tal vez también uno de los punteros inteligentes y Boost.Optional. Por último, echa un vistazo a Boost.Container y Boost.Intrusive. Si el improbable caso de que ninguno de estos proporcione una aproximación adecuada, debe proporcionar una mejor explicación de cuáles son sus objectives reales.

No hay un equivalente real, y sería extremadamente difícil proporcionar uno. Python y C ++ son lenguajes radicalmente diferentes, y proporcionar uno realmente no tendría mucho sentido en el contexto de C ++. Las diferencias más importantes son que todo en Python se asigna dinámicamente y es un “objeto”, y que Python utiliza la tipificación de pato.

FWIW: una biblioteca muy antigua (antes de las plantillas) en C ++ ofrecía contenedores de Object* , con clases derivadas a box int , double , etc. La experiencia real mostró muy rápidamente que no era una buena idea. (Y tengo curiosidad: ¿alguien más lo recuerda? Y, en particular, exactamente cómo se llamaba: algo con NHS, pero no puedo recordar más).

Estoy trabajando en una envoltura para std :: vector que se parece más a las listas de Python llamadas pylistpp . La API es como Python. Ejemplo:

 #include  #include  int main() { list 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; }