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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> алгоритмы STL 
:(
    Опции темы
lp_sun
Дата 4.6.2008, 20:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



народ, подскажите как реализовать след действия с помощью алгоритмов STL
просмотрел все алгоритмы просто не могу понять как их можно притулить для этих действий
подскажите плз с помощью каких алгоритмов это хоть можно сделать

вобщем есть vector<int>

1. заменитиь каждый пятый элемент на ноль
2. удалить все нечетные
PM MAIL   Вверх
bsa
Дата 4.6.2008, 22:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



второе:
Код
template<typename T>
struct IfOdd : public std::unary_function<T, bool>
{
    bool operator()(const T &value) const {
        return (value % 2) != 0;
    }
};

...

std::vector<int> array;
...
array.erase(std::remove_if(array.begin(), array.end(), IfOdd<int>()), array.end());
...

А первое можно реализовать через std::for_each.
PM   Вверх
anatox91
Дата 5.6.2008, 08:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


программист-самоучка
**


Профиль
Группа: Участник
Сообщений: 699
Регистрация: 12.1.2008
Где: ++Украина.Крым++

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



первое вроде так:
Код

#include <iostream>
#include <vector>
#include <cstdlib>
int main() {
    std::vector<int> k;
    for(size_t i=0; i < 25; ++i) {
               k.push_back(rand()%50);
               }
    std::vector<int>::iterator p;
    size_t j=0;
    for(p=k.begin(); p != k.end(); p++, j++) {
                     if((j%5)==0) *p=0;
                     }
    for(p=k.begin(); p != k.end(); p++) {
                     std::cout << *p << " ";
                     }
    std::cin.get();
    return 0;
}



--------------------

The code is the design ©

Sony VAIO VGN-FW480J

user posted image
PM MAIL ICQ   Вверх
bsa
Дата 5.6.2008, 10:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



anatox91, а где использование алгоритмов?
PM   Вверх
Rififi
Дата 5.6.2008, 13:35 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1254
Регистрация: 9.3.2008

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



Цитата(lp_sun @  4.6.2008,  20:47 Найти цитируемый пост)
народ, подскажите как реализовать след действия с помощью алгоритмов STL
1. заменитиь каждый пятый элемент на ноль


написать свой обобщенный алгоритм, естессно.
(для сокращения записи юзаем лямбда-функции из boost. можно также использовать "old-school" С++ стиль - предикат)

Код
#include <algorithm>
#include <boost/lambda/lambda.hpp>

// Замена каждого Nth-элемента на _Val
template <typename _FwdIt, typename _Ty>
void replace_nth(_FwdIt _First, _FwdIt _Last, const size_t Nth, const _Ty _Val)
{
    namespace lm = boost::lambda;
    size_t counter = 0;
    std::replace_if(_First, _Last, ++lm::var(counter) % Nth == 0, _Val);
}


тестируем:

Код
#include <algorithm>
#include <vector>
#include <iostream>

#include <boost/lambda/lambda.hpp>
#include <boost/assign.hpp>


// Замена каждого Nth-элемента на _Val
template <typename _FwdIt, typename _Ty>
void replace_nth(_FwdIt _First, _FwdIt _Last, const size_t Nth, const _Ty _Val)
{
    namespace lm = boost::lambda;
    size_t counter = 0;
    std::replace_if(_First, _Last, ++lm::var(counter) % Nth == 0, _Val);
}

// вывод контейнера на экран
template <
    typename _E, typename _Tr,
    template <typename, typename> class O,
    typename _Ty, typename _Ax,
    template <typename, typename> class Container>
O<_E,_Tr>& operator << (O<_E,_Tr>& os, const Container<_Ty, _Ax>& v)
{
    namespace lm = boost::lambda;
    std::for_each(v.begin(), v.end(), os << lm::_1 << lm::constant(" "));
    return os << std::endl;
}


// 1. заменитиь каждый пятый элемент на ноль
int main()
{
    std::vector<int> v;
    using boost::assign::operator +=;

    v += 1,2,3,4,5,6,7,8,9,10,11;

    std::cout << v;
    replace_nth(v.begin(), v.end(), 5, 0);
    std::cout << v;
    return (0);
}


Вывод:
Код
1 2 3 4 5 6 7 8 9 10 11
1 2 3 4 0 6 7 8 9 0 11


Это сообщение отредактировал(а) Rififi - 5.6.2008, 13:37
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


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

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


 




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


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

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