| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Функции для работы с массивами |
| Автор: Axert 19.9.2006, 14:48 |
| Подскажите функцию, которая возвращает минимальное значение массива. Что-то типа Min(array) в PHP. |
| Автор: Romikgy 19.9.2006, 15:13 |
| писать самому имхо , или юзать чтот типа boost PS объясни по какой причине вообще взялся за си? (имхо тяжко людям сначало юзавшим пхп переходить на си) |
| Автор: Axert 19.9.2006, 15:53 |
| Я не работал с PHP. А на си надо программу для лабораторной сделать, вот и вожусь... Написал сам, но код громоздкий и мне не понравился, решил спросить тут.... |
| Автор: Oleg_Ci 19.9.2006, 15:55 | ||
|
| Автор: EvgenZ 19.9.2006, 16:17 |
| algorithm, ничего себе, а я думал что это только для векторов и т.д. ... куль. |
| Автор: Romikgy 19.9.2006, 16:24 |
| EvgenZ, любой массив в памяти всеравно представлен в виде верктора! |
| Автор: EvgenZ 19.9.2006, 16:29 |
| Это да, я теперь даже незнаю почему думал, что алгоритмы пременимы только для std:: шных ... А вот почему хз, домой приду поиграю... |
| Автор: Syberex 19.9.2006, 16:35 |
| #pragma hdrstop #include<iostream> #include<stdlib.h> #include <algorithm.h> //--------------------------------------------------------------------------- #pragma argsused int main(int argc, char* argv[]) { const int len = 5; int mas[len] = {4, 3, 65, 2, 23}; //int mas[len]; // len =4 //mas[0]=4;mas[1]=3;mas[2]=65;mas[3]=2;mas[4]=23; int * min_int = min_element( mas, mas+len ); // <<<< âîò "îíî" std::cout << *min_int << "\n\n"; cout<<mas[0]<<endl; cout<<mas[1]<<endl; cout<<mas[2]<<endl; cout<<mas[3]<<endl; cout<<mas[4]<<endl; cout<<mas[5]<<endl; system("pause"); return 0; } //--------------------------------------------------------------------------- 5 элемент что такое? почему ты объявляешь массив из пяти элементов а не из 4-рёх? ведь x[5] содержит уже шесть элементов, и у тебя инициализация идут с 0 элемента. |
| Автор: MAKCim 19.9.2006, 16:49 | ||
В STL используется концепция итераторов, она построена на шаблонах и обобщенных алгоритмах а в данном случае int* является простейшим итератором |
| Автор: Romik_Yarosh 19.9.2006, 16:49 |
это почему 6 ? |
| Автор: Syberex 19.9.2006, 17:03 |
| а ты нулевой сивол учитываешь ? в твоём коде что ты написал, в массиве от 0 до 4 включительно твои цифры, а в 5 уже бред, или вернее сказать указатель на переменную min_int , эту же мне кажется утечка памяти. |
| Автор: Oleg_Ci 19.9.2006, 17:05 | ||
|
| Автор: zkv 19.9.2006, 17:16 |
int mas[5]; говорим, чтоб выделели память под 5 элементов, обращение к элементам: первый - mas[0] второй - mas[1] третий - mas[2] четвертый - mas[3] пятый - mas[4] никаких нуль-символов нигде нет |
| Автор: Syberex 20.9.2006, 07:49 |
| неа, там 5 элемент прописано min_int , вот эта штука. Но я тоже не могу понять почему это не компилится? сonst int len = 5; int mas[len] = {1, 2, 3, 4, 5, 6}; Добавлено @ 07:57 кажись я догнал 5 элемент это уже выход за пределы массива, значит использовать надо только 0-4 , да ? |
| Автор: EvgenZ 20.9.2006, 09:22 | ||
да. |
| Автор: Syberex 21.9.2006, 13:00 |
| long int* mas_Min(long int* first, long int* last) { long int* result=last; do {if(*first<*result){*result=*first;}} while(++first !=last); return first; }; |
| Автор: Oleg_Ci 21.9.2006, 15:52 | ||
Syberex, небольшая ошибка
|
| Автор: Syberex 22.9.2006, 08:44 |
| Да ты прав, то я из другово куска,брал return result; // << result вместо first , а так всё пашет, а главное без всяких там дополнительных подключений библиотек, и каких то там алгоритмов. |
| Автор: albertn 22.9.2006, 16:57 |
В min_element вторым параметром указывается следующий за последним элементом, если ты про это. |