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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Функции не возвращают массивы. Обход? Как красиво и оптимально реализовать? 
:(
    Опции темы
GrAndrey
Дата 16.1.2004, 21:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Функции в C++ не возвращают массивы.
Как можно наиболее оптимально и красиво добиться того-же эффекта?
PM MAIL   Вверх
Waters
Дата 16.1.2004, 21:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Использовать STL.

wbr.
PM MAIL   Вверх
Jcs
Дата 16.1.2004, 21:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Зачем, если не секрет, возвращать массив данных? Есть куча способов получить обработанный массив, например передать его адрес одним из параметров или, если он у тебя создается динамически, вернуть его адрес.
PM   Вверх
GrAndrey
Дата 17.1.2004, 10:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Сейчас я передаю в функцию указатель на объект, полю которого и присваиваются результаты. Но мне это не вполне нравится.
PM MAIL   Вверх
NiJazz
Дата 17.1.2004, 11:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Jazz coder
****


Профиль
Группа: Экс. модератор
Сообщений: 2286
Регистрация: 10.8.2003
Где: Москва

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



Можно массив использовать как глобальный, а функцией его только изменять.
PM MAIL   Вверх
maxim1000
Дата 17.1.2004, 11:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 17
Всего: 110



Цитата
Как можно наиболее оптимально и красиво добиться того-же эффекта?

а что значит "оптимально"?
если программа несложная, должна занимать мало места и быстро работать, то, конечно, лучше передавать указатель на какую-то область памяти и потом ее заполнять.
если программа довольно сложная, имеет большую объектную модель, то в этом случае, действительно, лучше использовать что-нибдуь вроде STL
Цитата
объект, полю которого и присваиваются результаты

ну так можно передавать, например, указатель на это поле
но вообще без описания конкретной задачи на такие вопросы сложно ответить...


--------------------
qqq
PM WWW   Вверх
Chingachguk
Дата 17.1.2004, 16:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Можно внутри процедуры выделить память (malloc, virtualalloc, etc) и верунть указатель на эту память, только потом не забыть ее вернуть. Кажется, в методе закрытия (я ничего не понимаю в си++) можно указать закрыть всю выделенную память.


--------------------
I don't like the drugs (but the drugs like me). M.Manson.
PM MAIL ICQ   Вверх
__vi
Дата 21.1.2004, 18:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Возвращай указатель

PM MAIL   Вверх
mr.DUDA
Дата 21.1.2004, 18:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 25
Всего: 232



Цитата
Кажется, в методе закрытия (я ничего не понимаю в си++) можно указать закрыть всю выделенную память.

Освободить выделенный блок памяти можно только по указателю на него, и только с помощью парной функции к той, какой память была выделена (речь идёт о new/delete, malloc/free, VirtualAlloc/VirtualFree). Сразу всю выделенную память освободить одной функцией нельзя, если конечно не имеется ввиду какой-то умный сторонний движок по управлению памятью.


--------------------
user posted image
PM MAIL WWW   Вверх
mi49.Ok
Дата 22.1.2004, 10:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Мне как то такая хрень понадобилась, я тогда писал преобразователь int'а в char. Я решил её так(наверно глупо):
Код

#include <stdio.h>
char chr_return(char _chr[], int num)
{
          ...//какие-то преобразования с _chr
          return _chr[num];
}
void main()
{
          char __chr[256]={""};
          for (auto __int8 i=0;i<256;i++)
                __chr[i]=chr_return(_chr, i);
}

PM MAIL ICQ   Вверх
Alex101
Дата 22.1.2004, 11:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(mi49 @ 22.1.2004, 07:53)
Я решил её так

Нет, тут возвращается элемент массива, а ему нужен массив.
Тип функции должен быть, например char*
А возвращать надо сам массив (по имени).


--------------------
С уважением, А. Фролов.
PM MAIL ICQ   Вверх
mi49.Ok
Дата 22.1.2004, 11:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Так нет, смысл в том, что делается цикл и в нём массиву(в который надо занести значение другого массива) возвращается соответствующее значение массива(из которого надо взять значение).
PM MAIL ICQ   Вверх
shedon
Дата 22.1.2004, 11:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1209
Регистрация: 17.1.2003
Где: Нижнiй Новгородъ

Репутация: 4
Всего: 11



Цитата
Так нет, смысл в том, что делается цикл и в нём массиву(в который надо занести значение другого массива) возвращается соответствующее значение массива(из которого надо взять значение).

lol, большего извращения не видел -smile.gif


--------------------
Programming is like sex: One mistake and you have to support it your lifetime
PM MAIL WWW ICQ   Вверх
mi49.Ok
Дата 22.1.2004, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



А вообще, когда ты передаёшь в функцию массив, то передаётся адрес на первый бит массива => можно изменять массив в функции и массив, который ты передавал в функцию, тоже будет соответственно изменяться. Но надо обращаться на битам, в цикл запихать не получиться. Это я сам проверил.
PM MAIL ICQ   Вверх
bel_nikita
Дата 22.1.2004, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата
А вообще, когда ты передаёшь в функцию массив, то передаётся адрес на первый бит массива => можно изменять массив в функции и массив, который ты передавал в функцию, тоже будет соответственно изменяться. Но надо обращаться на битам, в цикл запихать не получиться. Это я сам проверил.


А приче здесь битыconfused.gif

не на бит, а на элемент
точнее адрес. чтобы адресация по-битная была, токого я еще не видел

да и вообще зачем давать совет, если сам не знаешь, что советуешь

То GrAndrey
а зачем так извращаться?smile.gif
Для чего тебе это надо? Я думаю это недороботка программы.



--------------------
user posted image — регистрация доменов от 150 руб.
PM MAIL WWW ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

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

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

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

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


 




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


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

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