Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Коллекции

10K
12 июня 2007 года
АлРАД
58 / / 30.08.2006
Есть ли в С++ коллекции, по типу ArrayList, как в С#?

Заранее спасибо!

ЗЫ: если нет, то какой конструкцией в С++ можно заменить preserve redim
используемую в Visual Basic для того, чтобы изменить размерность динамического массива, но при этом не сбросив его значений

БЛАГОДАРЮ!
4.0K
12 июня 2007 года
ApokALEXIS
112 / / 23.08.2006
если создавать дилнемический с помощью malloc есть realloc.
4.3K
12 июня 2007 года
flat
142 / / 27.12.2005
Цитата: ApokALEXIS
если создавать дилнемический с помощью malloc есть realloc.


Это Си.
Если пишешь на С++, искользуй контейнер vector. Он сам заботится о выделении и освобождении памяти

350
13 июня 2007 года
cheburator
589 / / 01.06.2006
Цитата: АлРАД
Есть ли в С++ коллекции, по типу ArrayList, как в С#?

Заранее спасибо!

ЗЫ: если нет, то какой конструкцией в С++ можно заменить preserve redim
используемую в Visual Basic для того, чтобы изменить размерность динамического массива, но при этом не сбросив его значений

БЛАГОДАРЮ!



Советую скачать очень полезную библиотеку boost (http://boost.org). Среди прочего там есть контейнер multi_array, позволяющий изменять конфигурацию многомерного массива (имеется в виду, длину каждой размерности, но не количество размерностей... Впрочем, в подробности я не вникал, читай на вышеуказанном сайте).
Вот пример:

 
Код:
typedef boost::multi_array<double, 3> array_type;
  typedef array_type::extent_range range;

  array_type::extent_gen extents;
  array_type A(extents[2][3][4]);
  boost::array<array_type::index,ndims> dims = {{4, 3, 2}};      
  A.reshape(dims);

Массив размером [2][3][4] конвертируется в массив [4][3][2] без потери данных.
255
13 июня 2007 года
Dart Bobr
1.4K / / 09.04.2004
наскоко я знаю коллекции - это не часть языка C# а просто одна из удобностей .NET посему под с++.NET должно быть то же самое.
350
13 июня 2007 года
cheburator
589 / / 01.06.2006
Цитата: АлРАД
чтобы изменить размерность динамического массива, но при этом не сбросив его значений


Массив одномерный?
Что имеется в виду под изменением размерности массива - изменение собственно размера, т. е. числа вмещаемых туда элементов?
Если так, тебе нужен std::vector.
Пример:

 
Код:
// Создаем вектор с 3 элементами
std::vector<int> vec;
vec.push_back(1);
vec.push_back(2);
vec.push_back(3);
// Резервируем место под еще 13 элементов
vec.reserve(16);  // Указывается общий объем, а не число дополнительных мест
92
13 июня 2007 года
Тень Пса
2.2K / / 19.10.2006
в .Net framework есть ArrayList, который можно использовать и в MS C# и в MS VC++.

http://functionx.com/vcnet/collections/arraylist.htm
10K
13 июня 2007 года
АлРАД
58 / / 30.08.2006
cheburator, этот вопрос относится и к одномерным и многомерным массивам... под изменением размерности я имею ввиду просто изменить границы задаваемых размерностей, а не их количество... а что, многомерные vector не может менять?

Тень Пса и Dart Bobr, пордон, я не уточнил: я имел в виду С++ Builder
361
13 июня 2007 года
Odissey_
661 / / 19.09.2006
любой многомерный массив по природе своей одномерен в с++.
вам же посоветовали хорошую библиотеку boost::multi_array.
10K
13 июня 2007 года
АлРАД
58 / / 30.08.2006
Я в С++ новичек, поэтому хотелось бы сначала узнать встроеные возможности среды
92
14 июня 2007 года
Тень Пса
2.2K / / 19.10.2006
возможности среды разработки тут непричем :)

пользуй STL контейнеры или, как уже посоветовали, BOOST.
63
14 июня 2007 года
Zorkus
2.6K / / 04.11.2006
Как тут уже было сказано - у C# нет никакой "своей" библиотеки, есть библиотеки .NET. И их можно легко использовать из всех managed языков (в том числе, C#, MC++,Vb.NET...). Если же ты пишешь в "обычном" С++, то тебе уже сказали отличное решение.
10K
14 июня 2007 года
АлРАД
58 / / 30.08.2006
ясно, наверно я не догнал, прошу прощения
10K
14 июня 2007 года
АлРАД
58 / / 30.08.2006
странное дело:

 
Код:
std::vector<int> vec(10,20);
        vec[1,1]=5;
        vec.reserve(10);
        this->Caption = vec[1,1];
сначала как я понял, объявил двумерный массив, затем присвоил значение одной из его ячеек...

строка номер 3!!! - сделал этот массив одномерным(?), так как если:

vec.reserve(10,5);

то ошибка: Build
[C++ Error] collection.cpp(22): E2227 Extra parameter in call to _STL::vector<int,_STL::allocator<int> >::reserve(unsigned int)

вот, но самое интересное, что обращаюсь к значению vec[1,1], как к двумерному (??) - и он не выдвет ошибки

что тут не так?

ЗЫ: люди, где вообще про vector инфу найти можно? подскажите
заранее спасибо
4.3K
15 июня 2007 года
flat
142 / / 27.12.2005
Цитата: АлРАД

что тут не так?


Почти все :):)

Цитата: АлРАД
ЗЫ: люди, где вообще про vector инфу найти можно? подскажите
заранее спасибо


Хотя бы здесь: http://www.codenet.ru/progr/cpp/stl/istl.php
Но лучше купи хорощую книгу по языку С++

10K
15 июня 2007 года
АлРАД
58 / / 30.08.2006
Цитата:
Хотя бы здесь: http://www.codenet.ru/progr/cpp/stl/istl.php
Но лучше купи хорощую книгу по языку С++

спасибо

Цитата:
Почти все

гы-гы, очень смешно...

63
18 июня 2007 года
Zorkus
2.6K / / 04.11.2006
Цитата: АлРАД

сначала как я понял, объявил двумерный массив, затем присвоил значение одной из его ячеек...


Т.е. ты взял какой то пример, запустил его, убедился, что он не работает, и теперь, не имея понятия о том, что происходит ввиду отсутствия теоретической базы, пытаешься понять, что неправильно??
Если так, то это крайне неправильный подход. Лучше не пожалей несколько дней и поглубже вникни в STL. Это сэкономит тебе много бессонных ночей такого вот шаманства;)

Цитата: АлРАД

ЗЫ: люди, где вообще про vector инфу найти можно? подскажите
заранее спасибо


Так тебе надо вектор С++ - STL, или его аналог из стандартной библиотеки PHP? С языком-то определись.

350
18 июня 2007 года
cheburator
589 / / 01.06.2006
Информацию о векторе ищи в MSDN. Кажется, http://msdn.microcoft.com. Или читай стандарт ANSI/ISO 2003 на 757 страницах :)
350
18 июня 2007 года
cheburator
589 / / 01.06.2006
И еще. Насчет reserve, я ошибся, прошу прощения, reserve не выделяет новые элементы в векторе. Используй resize.
63
21 июня 2007 года
Zorkus
2.6K / / 04.11.2006
На мой взгляд - прежде чем читать MSDN, лучше почитать действительно хорошую книгу по стандартной библиотеке и STL в частности, благо они есть, и немало.
10K
23 июня 2007 года
АлРАД
58 / / 30.08.2006
Спасибо всем! Последую вашему совету, почитаю о STL, если что задам тут вопросы,

Спасибо всем!
63
23 июня 2007 года
Zorkus
2.6K / / 04.11.2006
Советую -- Николай Джосъютис. "С++ - стандартная библиотека. Для профессионалов." Немного тяжеловато написано - но мощно:).
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог