Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.76/21: Рейтинг темы: голосов - 21, средняя оценка - 4.76
Заблокирован

Контейнер, похожий на std::vector из C++

16.02.2015, 20:30. Показов 3952. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
скажите какой в шарпе контейнер наиболее похож на плюсовый вектор? вот вроде List (предчувствую сейчас скажут) он также дает динамическое изменение размера, доступ по индексу и т.п., но все таки ! List - переводится как список, а список это не массив ! элементы располагаются не линейно в памяти и т.п.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.02.2015, 20:30
Ответы с готовыми решениями:

Контейнер std::vector
Помогите определить почему не работает задача. Оибку выбивает на строку k.push_back(0); #include <iostream> #include...

На основе исходного std::vector<std::string> содержащего числа, создать std::vector<int> с этими же числами
подскажите есть вот такая задача. Есть список . Создать второй список, в котором будут все эти же числа, но не в виде строк, а в виде...

Как передать целочисленную матрицу типа std::vector<std::vector<int> > в функцию?
Здравствуйте. Почитал на форуме, но так и не понял что я делаю не так. Имеется двумерный вектор. Размера .. Нужно его передать в...

17
Заблокирован
16.02.2015, 20:48
Цитата Сообщение от Feaban Посмотреть сообщение
скажите какой в шарпе контейнер наиболее похож на плюсовый вектор? вот вроде List (предчувствую сейчас скажут)
Feaban, вы правы - это List
0
Заблокирован
16.02.2015, 20:50  [ТС]
Цитата Сообщение от Ev_Hyper Посмотреть сообщение
Feaban, вы правы - это List
а ближе что никакого нет? чтобы данные в памяти были последовательно расположены? все таки список это список... это не массив... а вектор он все таки реализует функционал динамического массива именно (для списка в stl есть конкретно list, deque и т.п.)
0
18 / 18 / 6
Регистрация: 21.12.2011
Сообщений: 72
16.02.2015, 20:55
На самом деле в C# нет чистых массивов как на плюсах. Даже примитивные типы, такие как int или double - это структуры.
Класс List - это удобная обертка, создающая иллюзию динамического массива (там идет работа с обычным массивом, который переопределяется с большей размерностью при необходимости).

Добавлено через 2 минуты
Цитата Сообщение от Feaban Посмотреть сообщение
а ближе что никакого нет? чтобы данные в памяти были последовательно расположены?
На сколько я знаю, массивы в C# (следовательно и List) располагают данные линейно.
0
Заблокирован
16.02.2015, 20:57  [ТС]
Цитата Сообщение от Zer0_CooL Посмотреть сообщение
На самом деле в C# нет чистых массивов как на плюсах. Даже примитивные типы, такие как int или double - это структуры.
ну это то я знаю
Цитата Сообщение от Zer0_CooL Посмотреть сообщение
Класс List - это удобная обертка, создающая иллюзию динамического массива (там идет работа с обычным массивом, который переопределяется с большей размерностью при необходимости).
вы же знаете как организованы списки да? структура из двух указателей на предыдущий и следущий элементы и сами данные, т.е. просто в списке по идее должен быть более долгий доступ по индексу (пусть даже он возможен), для этого надо перебирать как минимум половину элементов, а в обычном массиве доступ по индексу достигается простым смещением указателя на нужное число байт

Добавлено через 16 секунд
Цитата Сообщение от Zer0_CooL Посмотреть сообщение
На сколько я знаю, массивы в C# (следовательно и List) располагают данные линейно.
видимо плохо знаете
0
Заблокирован
16.02.2015, 21:03
Цитата Сообщение от Feaban Посмотреть сообщение
а ближе что никакого нет?
нету...

Цитата Сообщение от Feaban Посмотреть сообщение
вы же знаете как организованы списки да?
Feaban, открывайте книгу и смотрите как реализован List в С#...Для внутреннего представления своих элементов класс List<T> использует массив
0
Заблокирован
16.02.2015, 21:06  [ТС]
Цитата Сообщение от Ev_Hyper Посмотреть сообщение
Feaban, открывайте книгу и смотрите как реализован List в С#...Для внутреннего представления своих элементов класс List<T> использует массив
не представляю в какой книге могут быть исходники шарповских контейнеров, я сужу лишь по тому как вообще идейно должны быть реализованы списки, если это не так, то видимо в шарпе они реализованы как то не так... ну по крайней мере не надо было называть этот контейнер списком если он реализован не как список...
0
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10425 / 5155 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
16.02.2015, 21:15
Лучший ответ Сообщение было отмечено Feaban как решение

Решение

Цитата Сообщение от Feaban Посмотреть сообщение
ну по крайней мере не надо было называть этот контейнер списком если он реализован не как список...
Да, майкрософт немного пошутило когда назвали это List. На самом деле это динамический массив. Если вам нужен именно список - используйте LinkedList<T>
Хотя как на мой взгляд легче просто создать свой класс с Next и Prev.
1
Master of Orion
Эксперт .NET
 Аватар для Psilon
6101 / 4957 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
17.02.2015, 00:13
Storm23, алсо в свое время так и не понял смысл в его существовании, когда есть Queue<T>
0
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10425 / 5155 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
17.02.2015, 00:41
Цитата Сообщение от Psilon Посмотреть сообщение
алсо в свое время так и не понял смысл в его существовании, когда есть Queue<T>
Ну а вставка за O(1)
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6101 / 4957 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
17.02.2015, 02:08
Storm23, вставка куда? В центр O(N), вставка в очередь та же O(1) - да очередь это и есть тот же связный список, только с ограничением на добавление/удаление.
0
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10425 / 5155 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
17.02.2015, 11:58
Цитата Сообщение от Psilon Посмотреть сообщение
Storm23, вставка куда? В центр O(N), вставка в очередь та же O(1) - да очередь это и есть тот же связный список, только с ограничением на добавление/удаление.
Нет. Очередь это массив, не список:
The capacity of a Queue<T> is the number of elements the Queue<T> can hold. As elements are added to a Queue<T>, the capacity is automatically increased as required by reallocating the internal array.
Добавление элемента - O(1), но вставка была бы O(n), как и в любой массив.
В список же - вставка всегда O(1) в любое место.
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
17.02.2015, 12:03
Цитата Сообщение от Feaban Посмотреть сообщение
не представляю в какой книге могут быть исходники шарповских контейнеров
А зачем вообще книга, если есть Reflector...
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6101 / 4957 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
17.02.2015, 12:22
Цитата Сообщение от Storm23 Посмотреть сообщение
Добавление элемента - O(1), но вставка была бы O(n), как и в любой массив.
В список же - вставка всегда O(1) в любое место.
Ну эт да, я сначала тупанул, подумал про поиск нужного места для вставки (ведь нужно пройтись Head.Next.Next.Next...), короч ладно

А вот что Queue тоже на массиве не знал, честно говоря. Гораздо логичнее его делать именно на базе двусвязного списка имхо.
0
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10425 / 5155 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
17.02.2015, 12:29
Цитата Сообщение от Psilon Посмотреть сообщение
Гораздо логичнее его делать именно на базе двусвязного списка имхо.
Но список требует существенный оврхед на ссылки.
А очередь легко реализуется на зацикленном массиве. Только увеличивать его иногда нужно конечно.

А вот чего не хватает во фреймворке - так это ограниченного стека и ограниченнной очереди.
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6101 / 4957 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
17.02.2015, 12:39
Storm23, зависит от задачи. С другой стороны, никто не мешает написать свою мини-обертку над LinkedList<T> чтобы получить нужную очередь.

меня больше расстраивает тупость с интерфейсами, в частности ICollection<T> и IList<T>. Их нужно разделить на пяток различных, потому что ситуация, когда массив имплементирует IList<T>, но при попыкте вызвать почти любой метод выкидывает исключение, это довольно бредовая ситуация.
0
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10425 / 5155 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
17.02.2015, 12:50
Да, IList мне тоже не нравится. Из-за того что там слишком много методов нужно реализовать. Причем 90% этих методов никто не вызывает.
Часто нужно сделать свой List (допустим нужны какие то операции при добавлении элементов), но реализовывать IList - лень. И тогда приходится писать либо
C#
1
2
3
4
class Foo<T>: List<T>
{
   new void Add(){...}
}
либо

C#
1
2
3
4
5
class Foo<T>
{
   List<T> innerList;
   void Add(){...}
}
И тот и другой варианты - не очень хорошие.
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6101 / 4957 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
17.02.2015, 12:58
Storm23, в этом плане в шестом шарпе хорошо - можно делегировать всё к внутреннему свойству (насколько я понял, всю эту писанину void Add(T item) { innerCol.Add(item); } наконец переложили на компилятор). Но тут вот например хорошо расписал парень:
There are no readonly interfaces for collections either. And I'm missing those even more than a constant sized with indexers interface.

IMO there should be several more (generic) collection interfaces depending on the features of a collection. And the names should have been different too, List for something with an indexer is really stupid IMO.
  • Just Enumeration IEnumerable<T>
  • Readonly but no indexer (.Count, .Contains,...)
  • Resizable but no indexer, i.e. set like (Add, Remove,...) current ICollection<T>
  • Readonly with indexer (indexer, indexof,...)
  • Constant size with indexer (indexer with a setter)
  • Variable size with indexer (Insert,...) current IList<T>

I think the current collection interfaces are bad design. But since they have properties telling you which methods are valid(and this is part of the contract of these methods) it doesn't break the substitution principle.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.02.2015, 12:58
Помогаю со студенческими работами здесь

Ошибка: E2034 Cannot convert 'int' to 'std::vector<std::vector<TRabbitCell,std::allocator<TRabbitCell>>...
Есть двухмерный вектор: std::vector&lt;std::vector&lt;TRabbitCell&gt; &gt; *cells(5, 10); Пытаюсь заполнить его объектами класса...

Как изменять размер std::vector<std::vector>?
Здравствуйте, как нужно изменять размер std::vector&lt;std::vector&gt; например: std::vector&lt;std::vector&lt;float&gt;&gt; data; ...

Вывести значения std::vector<std::vector<int*> >
Подскажите, как вывести значения? const size_t row = 3; const size_t col = 3; std::vector&lt;std::vector&lt;int*&gt; &gt; imatrix; ...

Выделение памяти для вектора std::vector<iris> *v = new std::vector<iris>
Можно ли создать вектор, выделить для него память, так что бы он &quot;жил&quot; до конца работы программы. иметь на него постоянную...

Std::vector<std::pair<std::vector<int>::iterator, std::vector<int>::iterator>
Вопрос по вектору. Допустим есть вектор, std::vector&lt;int&gt; vec; на каком - то этапе заполнения я ставлю закладку итератора, ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru