Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как создать переопределяемый динамический массив 
:(
    Опции темы
Zero
  Дата 6.10.2005, 20:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: нет
Всего: 24



В общем случае чтобы создать динамический массив, то это делается так:
Код

typedef int*intptr;
............
intptr mas;
mas = new int[1];

//Далее мне нужно определить первый элемент
mas[0] = 5435;

//Далее мне нужно переопределить массив
//но если сделать так
mas = new int[2];
//тогда mas[0] сотрётся и её надо заново вводить

А как сделать так чтобы переменную mas не заново определять, а к текущеё добавить или убрать нужное кол-во элементов.
Хорошо бы если за место функции new была бы функция редактирования кол-ва элементов, как в делфи с помощью функции SetLength можно устанавливать в любой момент времени нужнок кол-во элементов.
PM MAIL ICQ   Вверх
Mayk
Дата 6.10.2005, 21:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: 45
Всего: 134



использовать vector из stl.

Код

#include <vector>
#include <iostream>

using namespace std;

int main()
{
        vector<int> s(3);
        s[0]=0;
        s[1]=1;
        s[2]=2;
        s.push_back(3);
        s.resize(6);
        s[4]=99;
        s[5]=100;

        for(int i=0;i != s.size(); ++i){
                cout << i << ')' << s[i] << endl;
        }
}


Это сообщение отредактировал(а) Mayk - 6.10.2005, 21:12


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
Zero
Дата 6.10.2005, 21:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: нет
Всего: 24



Ето, как оно... А с массивом не как нельзя, а то я в дальшейшем планирую массив использовать с типом class
PM MAIL ICQ   Вверх
Mayk
Дата 6.10.2005, 21:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: 45
Всего: 134



Афаир нет(если не рассматривать изобретение велосипедов).
Цитата(Zero @ 7.10.2005, 01:33)
планирую массив использовать с типом class

А что мешает использовать вектор классов а ля vector<MyClass>?


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
Zero
Дата 6.10.2005, 22:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: нет
Всего: 24



Блин, и чем все этот С++ расхваливают... Ничего по человечески нельзя сделать. Вот делфи тама всё просто, написал
Код

SetLength(Mas,<нужный размер>); 

B всё зашибись... А тут всё через ж....у smile
Ладно, буду использовать массив на 1000 элементов...
Но если кто найдёт, альтернативу функции SetLength, то пишите...
И именно с массивами... smile
PM MAIL ICQ   Вверх
Mayk
  Дата 6.10.2005, 22:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: 45
Всего: 134



Цитата(Zero @ 7.10.2005, 02:08)
И именно с массивами..

А что, вектор чем-то очень сильно отличается от массива? Не так давно уже был спор на тему вектор против массива. Советую посмотреть.


Цитата(Zero @ 7.10.2005, 02:08)
B всё зашибись...

млин, я тебе пример привёл
Код

mas.resize(<нужный размер>)


Можешь realloc юзать, но это си(и соотсно malloc/free вместо new/delete), а не плюсы, и при использовании его в плюсах могут быть серьезные проблемы(operator = и всё такое)


ps. я так и не понял почему vector<Class> не подходит, а Class [] подходит.


Это сообщение отредактировал(а) Mayk - 6.10.2005, 22:19


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
Zero
Дата 6.10.2005, 22:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: нет
Всего: 24



Ладно, буду делать с векторами... smile

Это сообщение отредактировал(а) Zero - 7.10.2005, 08:12
PM MAIL ICQ   Вверх
Helicopterr
Дата 6.10.2005, 22:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 355
Регистрация: 20.8.2005
Где: Stavropol

Репутация: 2
Всего: 3



сперва почитай, потом делай выводы, всё не так уж и "нахрен"


--------------------
people can fly
PM MAIL   Вверх
Mayk
Дата 6.10.2005, 22:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: 45
Всего: 134



Цитата(Zero @ 7.10.2005, 02:26)
Зачем из языка помойку делают и потом доказывают что он лучше делфи,

Кто? Где? делают помойку? Нет никакой помойки.

Как бы ни было язык С++ не могут любить за то, что он походит на делфи. Это я к
Цитата(Zero @ 7.10.2005, 02:26)
А зачем в этот С++ понавтыкали однотипных команд? Зачем из языка помойку делают и потом доказывают что он лучше делфи,

Цитата(Zero @ 7.10.2005, 02:08)
И чем все этот С++ расхваливают...  Вот делфи тама всё просто, написал

Дельфи - это дельфи. С++ - это С++. Хвалить язык за похожесть на другой по крайне мере не разумно. По крайне мере в контексте с/паскаль.

Цитата(Zero @ 7.10.2005, 02:26)
А нахрен, в этот С++ понавтыкали однотипных команд?

Цитата(Zero @ 7.10.2005, 02:08)
А тут всё через ж....у

"К проклятьям не прибегну и сдержусь" (с)
Просто посоветую выбирать выражения.


Цитата(Zero @ 7.10.2005, 02:26)
Ладно, прочитаю ка я главу про векторы потом муду думать как дальше поступать...

По-моему это гораздо лучше, чем не зная языка кричать "язык - ацтой, в нем setsize'а нет".

Это сообщение отредактировал(а) Mayk - 6.10.2005, 22:42


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
bel_nikita
Дата 6.10.2005, 22:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2304
Регистрация: 12.10.2003
Где: Поезд №21/22 ( ст . Прага )

Репутация: 21
Всего: 47



smile Zero
Цитата
А нахрен, в этот С++ понавтыкали однотипных команд? Зачем из языка помойку делают и потом доказывают что он лучше делфи, ссылаясь на то что тут можно делать много тупых вещей, глобально запутанных, нарушающих хороший стиль программирования
нахрен, нахрен ....
А чего тогда из Делфи в этот С++ лезешь? smile Сиди в своих Делфях и радуйся жизни smile

Цитата
B всё зашибись... А тут всё через ж....у
скорее руки не так заточены

З.Ы.: учимся пользоваться поиском

З.Ы.Ы.: тему в мусорку




--------------------
user posted image — регистрация доменов от 150 руб.
PM MAIL WWW ICQ   Вверх
Neitron
Дата 7.10.2005, 09:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 580
Регистрация: 3.10.2005
Где: Москва

Репутация: 2
Всего: 5



Блин чо реально было спор вектор vs массив?
Вектор и есть массив.!!!!
Он практически ничем не отличается от массива.
Если судить по свойсвам. Свойсва массива в том что все элементы расположены друг за другом.
Код

mas = new int[2];
//тогда mas[0] сотрётся и её надо заново вводить

У тебя ничего не сотрется. Стирается после выполнения delete
У тебя mas будет указывать уже на новую память. И ПРОИЗОЙДЕТ УТЕЧ КА ПАМЯТИ.
Си всегда рвал Дельфи как шарик грелку.

Я не помню чтобы хоть один нормальный проект писали на дельфях.

Это сообщение отредактировал(а) Neitron - 7.10.2005, 09:43


--------------------
Хороший программист никогда ничего не делает хорошо с первого раза. Он понимает важность патчей.
Ⓘ ⓁⒾⓀⒺ ⓂⓄⓏⒾⓁⓁⒶ
PM MAIL   Вверх
Mayk
Дата 7.10.2005, 09:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: 45
Всего: 134



Цитата(Neitron @ 7.10.2005, 13:39)
Блин чо реально было спор вектор vs массив?

http://forum.vingrad.ru/index.php?showtopi...w=all&hl=vector
вот здесь немного было. Совсем чуть-чуть, но было.

Цитата(Neitron @ 7.10.2005, 13:39)
Я не помню чтобы хоть один нормальный проект писали на дельфях.

Хех, не советую говорить подобное в разделе по дельфи. Уверен, у них подготовлена бумажка, на которой записаны названия программ написанных на дельфях. smile

Это сообщение отредактировал(а) Mayk - 7.10.2005, 09:52


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
Neitron
Дата 7.10.2005, 12:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 580
Регистрация: 3.10.2005
Где: Москва

Репутация: 2
Всего: 5



Цитата
Уверен, у них подготовлена бумажка, на которой записаны названия программ написанных на дельфях.

ГЫыыыыыыыыыыыыыыыыыыыыыыыыыыыыыыыы=)


--------------------
Хороший программист никогда ничего не делает хорошо с первого раза. Он понимает важность патчей.
Ⓘ ⓁⒾⓀⒺ ⓂⓄⓏⒾⓁⓁⒶ
PM MAIL   Вверх
En_t_end
Дата 7.10.2005, 12:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2074
Регистрация: 4.12.2004

Репутация: 1
Всего: 20



Mayk
Цитата(Mayk @ 7.10.2005, 02:14)
Можешь realloc юзать, но это си(и соотсно malloc/free вместо new/delete), а не плюсы, и при использовании его в плюсах могут быть серьезные проблемы(operator = и всё такое)

Не вижу проблем. Перевыделение или добавление памяти под массив - это нормальная практика... кстати в тестах по С++, бывает проскакивает такой вопрос.
Zero
Цитата(Zero @ 7.10.2005, 00:53)
Хорошо бы если за место функции new была бы функция редактирования кол-ва элементов, как в делфи с помощью функции SetLength можно устанавливать в любой момент времени нужнок кол-во элементов.

Дело в том, что этот SetLenght 100% был написан на Си, причем на основе того же realloc, но, используя скорее всего тучу лишних действий.

ЗЫ товарищ Zero, если вы будете продолжать "хаять" С++, то я думаю скоро вам вообще здесь перестанут помогать.
Либо критикуйте конструктивно, либо не критикуйте вовсе.
Цитата(Zero @ 7.10.2005, 02:08)
Блин, и чем все этот С++ расхваливают... Ничего по человечески нельзя сделать. Вот делфи тама всё просто, написал

"Тама" у "васа" в "Дельфя" в "тома" и проблема, что все "така" "проста".
PM MAIL ICQ Skype GTalk Jabber   Вверх
Mayk
Дата 7.10.2005, 19:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: 45
Всего: 134



Цитата(En_t_end @ 7.10.2005, 16:47)
Не вижу проблем.

Проблема раз - не всякий класс можно просто так взять и сдвинуть(например, к которому обращаются извне). Другой вопрос что такой класс делает в массиве, но ситуацию придумать можно.

Проблема два - realloc(по Святому Стандарту) вовсе не обязан вызывать ::operator new для выделения памяти. В частности это значит, что если мы перегрузим new/delete(зачем - обсуждается в соседней ветке), то у нас будут проблемы - delete получит указатель не от new.
Привет, дебагер.


Цитата(En_t_end @ 7.10.2005, 16:47)
Дело в том, что этот SetLenght 100% был написан на Си

Из Small C был получен C. Не знаю насчёт дельфи, но имхо он вполне мог быть написан на пасе.
Менеджер памяти имхо написать на дельфях можно. Ф-ция по аллоканию памяти есть в оси.
А если учесть тот факт, что существуют оси написанные на пасе, то очень вероятно предположить, что setlength мог быть написан не на си.


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0929 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.