Не могли бы вы рассказать мне, что является ближайшим типом данных в C++ для списка python? Если нет ничего похожего, как бы вы построили его на C++?эквивалент Python в C++?
ответ
std::vector
s, s std::list
и arrays (или std::array
s) все имеют функции, аналогичные списки Python. Какую структуру данных вы хотите выбрать, зависит от ваших требований.
Списки Python могут хранить элементы разных типов. http://docs.python.org/release/1.5.1p1/tut/lists.html – Korchkidu
@Korchkidu Правда, но это было не то, о чем специально спросил ассер. И делать это на C++, особенно в качестве новичка, задает проблемы. Если ген не изменит вопрос о том, что они специально запрашивают что-то, что может хранить любой тип, то я собираюсь интерпретировать этот вопрос как запрос одномерной структуры данных с произвольным доступом. –
@ EricFinn Он специально не просил ничего. Предположительно, он знает о 'std :: vector' (кто этого не делает), и это недостаточно близко. Почему это не достаточно близко, это еще один вопрос/ –
Возможно хранение 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;
}
Собственно, хранение 'std :: shared_ptr
@JamesKanze: Да. в самом деле. Спасибо за информацию. Не уверен, как далеко он хочет идти в направлении Python, хотя;) – Korchkidu
Фактически никакой контейнер C++ не эквивалентен списку Python, что частично является результатом очень разных объектных моделей C++ и Python. В частности, предложенный и поддержанный std :: list - это IMHO, даже не близкий к типу списка Python, я бы предпочел предложить std :: vector или, может быть, std :: deque. Тем не менее, неясно, что именно вы хотите и как «построить» сильно зависит от того, что именно «это», то есть от того, что вы ожидаете от контейнера.
Я предлагаю вам ознакомиться с контейнерами C++ std :: vector, std :: deque и std :: list, чтобы получить обзор. Затем посмотрите на такие вещи, как Boost.Any и Boost.Variant, которые вы можете комбинировать с ними, возможно, также один из умных указателей и Boost.Optional. Наконец, проверьте Boost.Container и Boost.Intrusive. Если маловероятный случай, когда ни одно из них не дает подходящего приближения, вам необходимо лучше объяснить, каковы ваши фактические цели.
Не забывайте, что вы можете написать что-то вроде 'l2 = l1 [3: 20: 2]', чтобы получить каждый другой элемент в диапазоне '[3 ... 20]'. И этот индекс отрицательных индексов с дальнего конца. –
Нарезки Python очень мощные, вы даже можете использовать их для вставки или удаления элементов. Однако размышление о том, что контейнер может или не может сделать, бесполезно, OP нуждается в разъяснении, что именно им нужно. –
Реального эквивалента нет, и было бы чрезвычайно сложно получить . Python и C++ радикально отличаются от языков, и предоставление одного действительно не имеет смысла в контексте C++. Наиболее важными отличиями являются то, что все в Python динамически распределено и является «объектом» , и что Python использует утиную печать.
FWIW: один очень рано библиотека (до шаблонов) в C++ сделал предложение контейнеров из Object*
, с производными классами боксировать int
, double
и т.д. Фактический опыт показал очень быстро, что не было хорошей идеей. (И мне любопытно: кто-нибудь еще его помню? И конкретно, именно то, что было , называется --- что-то с NHS в нем, но я не могу вспомнить больше.)
Я работаю над wrapper для 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;
}
- 1. Python эквивалент C# .Выбрать?
- 2. Python эквивалент C++ getline()
- 3. C++ эквивалент Python GetAttr
- 4. C# эквивалент Python repr()
- 5. Эквивалент python: scipy.optimize() в C++?
- 6. C# Parallel.Foreach эквивалент в Python
- 7. python struct.pack эквивалент в C++
- 8. C# эквивалент rjust в python
- 9. Эквивалент кода Python в C#?
- 10. C эквивалент Python crypto.crypto()
- 11. Python zip() эквивалент в C или C++
- 12. Python эквивалент C# LINQ's select
- 13. Python эквивалент указателя элемента C++
- 14. Python эквивалент функции R c()?
- 15. C эквивалент регулярного выражения Python
- 16. Python эквивалент для выражения C
- 17. C++-эквивалент библиотеки «construct» Python
- 18. C# эквивалент для python pdb.set_trace()
- 19. Python эквивалент C-подобного присвоения в условном
- 20. Как изменить [:] python на эквивалент в C++
- 21. Что такое эквивалент python «new» в C++
- 22. эквивалент экземпляра C++ enum в Python
- 23. opencv эквивалент кода python в C++
- 24. Python-эквивалент короткой формы "если" в C++
- 25. Есть ли эквивалент Python ImportError в C#
- 26. Tensorflow: эквивалент python tf.gradients в C++
- 27. C# эквивалент «ошибки значения» в Python
- 28. Что такое эквивалент задачи C# в python
- 29. Эквивалент __func__ (от C) в Python
- 30. OpenCV: эквивалент Python `setTo` в C++
http://www.cplusplus.com/reference/list/list/. Обратите внимание, что списки C++ реализованы как дважды связанный список, в то время как списки python - это [массивы переменной длины] (http://docs.python.org/2/faq/design.html#how-are-lists-implemented). –
Какую функцию вы ищете? – Mario
@AshwiniChaudhary: списки Python могут хранить элементы, имеющие разные типы. http://docs.python.org/release/1.5.1p1/tut/lists.html – Korchkidu