Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Общие вопросы > Функции не возвращают массивы. Обход? |
Автор: GrAndrey 16.1.2004, 21:02 |
Функции в C++ не возвращают массивы. Как можно наиболее оптимально и красиво добиться того-же эффекта? |
Автор: Waters 16.1.2004, 21:42 |
Использовать STL. wbr. |
Автор: Jcs 16.1.2004, 21:54 |
Зачем, если не секрет, возвращать массив данных? Есть куча способов получить обработанный массив, например передать его адрес одним из параметров или, если он у тебя создается динамически, вернуть его адрес. |
Автор: GrAndrey 17.1.2004, 10:20 |
Сейчас я передаю в функцию указатель на объект, полю которого и присваиваются результаты. Но мне это не вполне нравится. |
Автор: NiJazz 17.1.2004, 11:14 |
Можно массив использовать как глобальный, а функцией его только изменять. |
Автор: maxim1000 17.1.2004, 11:52 | ||||
а что значит "оптимально"? если программа несложная, должна занимать мало места и быстро работать, то, конечно, лучше передавать указатель на какую-то область памяти и потом ее заполнять. если программа довольно сложная, имеет большую объектную модель, то в этом случае, действительно, лучше использовать что-нибдуь вроде STL
ну так можно передавать, например, указатель на это поле но вообще без описания конкретной задачи на такие вопросы сложно ответить... |
Автор: Chingachguk 17.1.2004, 16:57 |
Можно внутри процедуры выделить память (malloc, virtualalloc, etc) и верунть указатель на эту память, только потом не забыть ее вернуть. Кажется, в методе закрытия (я ничего не понимаю в си++) можно указать закрыть всю выделенную память. |
Автор: __vi 21.1.2004, 18:20 |
Возвращай указатель |
Автор: mr.DUDA 21.1.2004, 18:33 | ||
Освободить выделенный блок памяти можно только по указателю на него, и только с помощью парной функции к той, какой память была выделена (речь идёт о new/delete, malloc/free, VirtualAlloc/VirtualFree). Сразу всю выделенную память освободить одной функцией нельзя, если конечно не имеется ввиду какой-то умный сторонний движок по управлению памятью. |
Автор: mi49.Ok 22.1.2004, 10:53 | ||
Мне как то такая хрень понадобилась, я тогда писал преобразователь int'а в char. Я решил её так(наверно глупо):
|
Автор: Alex101 22.1.2004, 11:19 | ||
Нет, тут возвращается элемент массива, а ему нужен массив. Тип функции должен быть, например char* А возвращать надо сам массив (по имени). |
Автор: mi49.Ok 22.1.2004, 11:34 |
Так нет, смысл в том, что делается цикл и в нём массиву(в который надо занести значение другого массива) возвращается соответствующее значение массива(из которого надо взять значение). |
Автор: shedon 22.1.2004, 11:39 | ||
lol, большего извращения не видел - ![]() |
Автор: mi49.Ok 22.1.2004, 14:50 |
А вообще, когда ты передаёшь в функцию массив, то передаётся адрес на первый бит массива => можно изменять массив в функции и массив, который ты передавал в функцию, тоже будет соответственно изменяться. Но надо обращаться на битам, в цикл запихать не получиться. Это я сам проверил. |
Автор: bel_nikita 22.1.2004, 17:06 | ||
А приче здесь биты ![]() не на бит, а на элемент точнее адрес. чтобы адресация по-битная была, токого я еще не видел да и вообще зачем давать совет, если сам не знаешь, что советуешь То GrAndrey а зачем так извращаться? ![]() Для чего тебе это надо? Я думаю это недороботка программы. |
Автор: GrAndrey 23.1.2004, 17:09 | ||
Почему извращаться? Разве редко в результате работы функции должен измениться массив? Как я писал, задачу решил, но не уверен что такой подход достаточно красивый ( я пишу прогу - тестовое задание, красота кода важна ![]() |
Автор: bel_nikita 24.1.2004, 01:13 | ||||
GrAndrey чтобы возвращать массив тебе придется обернуть его в класс и ..., короче гемор лучше для этого использовать STL. типа того (пример возврата)
|
Автор: Stalk 24.1.2004, 01:30 |
А почему нельзя юзать union? |
Автор: shedon 24.1.2004, 01:44 | ||
Может, я чего не понял с тем, что нужно, но если надо возвращать масиив, то можно просто возвращать указатель, например так:
|
Автор: mi49.Ok 24.1.2004, 07:43 | ||
2 bel_nikita:
Самый умный? Так скажи сам что-нибудь. |
Автор: GrAndrey 24.1.2004, 13:15 | ||||||
У меня, вроде, всё проще ![]() |
Автор: mr.DUDA 24.1.2004, 15:56 | ||
2 Stalk,
А при чём здесь union ?... |
Автор: Stalk 25.1.2004, 09:26 |
А при том, что в него можно запихнуть массив. |
Автор: shedon 25.1.2004, 12:41 | ||
Может тогда отдельный класс создать, в который запихнуть массив, и возвращать его. ![]() |
Автор: Stalk 25.1.2004, 17:11 |
Этот вариант уже предложен. |
Автор: C'hoosen++ 28.1.2004, 17:43 |
Использовать ссылочный вариант передачи массивов как аргументов. |
Автор: FreshMeat 30.1.2004, 16:29 |
Возвращать контейнер обернутый std::auto_ptr |