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

Поиск:

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


Шустрый
*


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

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



Цитата(bel_nikita @ 22.1.2004, 17:06)
То GrAndrey
а зачем так извращаться?smile.gif
Для чего тебе это надо? Я думаю это недороботка программы.

Почему извращаться? Разве редко в результате работы функции должен измениться массив? Как я писал, задачу решил, но не уверен что такой подход достаточно красивый ( я пишу прогу - тестовое задание, красота кода важна wink.gif )
PM MAIL   Вверх
bel_nikita
Дата 24.1.2004, 01:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



GrAndrey
чтобы возвращать массив тебе придется обернуть его в класс и ..., короче гемор
лучше для этого использовать STL.
типа того (пример возврата)
Код
template <typename T = std::allocator<T> > T copyArray_20(const T &Array)
{
 T newArray(Array.size());
 copy(Array.begin(),Array.end(),newArray.begin());
 return newArray;
}

template <typename T = std::allocator<T> > T copyArray_21(const T &Array)
{
  T newArray; T::const_iterator elem=Array.begin();
  for(;elem<=Array.end();++elem) newArray.push_back(*elem);
  //while(elem!=Array.end()) newArray.push_back(*elem++);
  return newArray;
}


Код
 deque<int> Array(10);
 deque<int> Massiv;

 for(i=0;i<10;++i)
   Array[i]=i+10;

 Massiv=copyArray_21(Array);

 for(i=0;i<10;++i)
   printf("%d ",Massiv[i]);


Это сообщение отредактировал(а) bel_nikita - 24.1.2004, 01:20


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


Шустрый
*


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

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



А почему нельзя юзать union?
PM MAIL ICQ   Вверх
shedon
Дата 24.1.2004, 01:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Может, я чего не понял с тем, что нужно, но если надо возвращать масиив, то можно просто возвращать указатель, например так:
Код

// Объявляем функцию которая будет возвращать массив
int *FuncRetArr(int *ifArr);

// Сам массив
int iArr[] = {12, 587, 10, 39, 78};

int main()
{
     int *iTemp = FuncRetArr(iArr);
     // Для получения, например, второго элемента из массива можно сделать так
    int iNum = FuncRetArr(iArr)[2];
     for(int i= 0; i < sizeof(iTemp )/sizeof(int); i++)
    {
         printf("%d", iTemp[I]);
    }

  return 0;
}

int *FuncRetArr(int *ifArr)
{
 // Что то делаем с ifArr
//....
 // Возвращаем массив
 return ifArr;
//
}


Это сообщение отредактировал(а) shedon - 24.1.2004, 01:45


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


Шустрый
*


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

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



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

Самый умный? Так скажи сам что-нибудь.
PM MAIL ICQ   Вверх
GrAndrey
Дата 24.1.2004, 13:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(bel_nikita @ 24.1.2004, 01:13)
GrAndrey
лучше для этого использовать STL.
типа того (пример возврата)
Код
template <typename T = std::allocator<T> > T copyArray_20(const T &Array)
{
 T newArray(Array.size());
 copy(Array.begin(),Array.end(),newArray.begin());
 return newArray;
}

template <typename T = std::allocator<T> > T copyArray_21(const T &Array)
{
  T newArray; T::const_iterator elem=Array.begin();
  for(;elem<=Array.end();++elem) newArray.push_back(*elem);
  //while(elem!=Array.end()) newArray.push_back(*elem++);
  return newArray;
}


Код
 deque<int> Array(10);
 deque<int> Massiv;

 for(i=0;i<10;++i)
   Array[i]=i+10;

 Massiv=copyArray_21(Array);

 for(i=0;i<10;++i)
   printf("%d ",Massiv[i]);

У меня, вроде, всё проще smile.gif Но, тем не менее спасибо. Нашёл в коде интересные вещи.
PM MAIL   Вверх
mr.DUDA
Дата 24.1.2004, 15:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



2 Stalk,
Цитата
А почему нельзя юзать union?

А при чём здесь union ?...


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


Шустрый
*


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

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



А при том, что в него можно запихнуть массив.
PM MAIL ICQ   Вверх
shedon
Дата 25.1.2004, 12:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата
А при том, что в него можно запихнуть массив.

Может тогда отдельный класс создать, в который запихнуть массив, и возвращать его. smile.gif


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


Шустрый
*


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

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



Этот вариант уже предложен.
PM MAIL ICQ   Вверх
C'hoosen++
Дата 28.1.2004, 17:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Использовать ссылочный вариант передачи массивов как аргументов.
PM MAIL   Вверх
FreshMeat
Дата 30.1.2004, 16:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Возвращать контейнер обернутый std::auto_ptr
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
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.0928 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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