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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> прервать ввод из std::cin по условию 
V
    Опции темы
andrew_121
Дата 31.10.2009, 18:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


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

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



Всем привет.
Есть такой код:
Код

    std::vector<int> array;
    // read from keyboard
    std::copy(
            std::istream_iterator<int>(std::cin),
            std::istream_iterator<int>(),
            std::back_inserter(array)
    );


Как его адаптировать так, чтоб при вводе пустой строки, считывание прекратилось? Есть вариант написать copy_if(). Может есть еще какие-то варианты?


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
andrew_121
Дата 1.11.2009, 00:05 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


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

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



Вот так решил:
Код


#include <vector>
#include <iostream>
#include <iterator>

template <typename _input_iterator, typename _output_iterator, typename _predicate>
_output_iterator copy_if(_input_iterator first, _input_iterator last, _output_iterator result, _predicate pred) {
    _input_iterator current_in = first;
    _output_iterator current_out = result;
    while (current_in != last) {
        if (pred(*current_in)) {
            *current_out = *current_in;
            ++current_out;
            ++current_in;
        } else {
            ++current_in;
        }
    }
    return current_out;
}

template<typename T>
struct terminator {
    terminator():ch(0) {}
    terminator(const T& c):ch(c) {}
    /**  */
    bool operator() (const T& v) {
        return v != ch;
    }
    T ch;
};

int main() {
    std::vector<int> arr;
    std::cout << "Enter: " << std::endl;
    copy_if(std::istream_iterator<int>(std::cin), std::istream_iterator<int>(), std::back_inserter(arr), terminator<int>('q'));

    std::cout << "Result: " << std::endl;
    std::copy(arr.begin(), arr.end(), std::ostream_iterator<int>(std::cout, " "));
    
    return 0;
}


Всем спасибо!

Это сообщение отредактировал(а) andrew_121 - 1.11.2009, 09:31


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
andrew_121
Дата 1.11.2009, 00:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


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

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



Еще шаблонная функция, читающая из файла в массив, пока не введен завершающий символ.может кому сгодится
Код

template<typename T>
std::vector<T> read_from_file_into_array(std::istream& file, const T& term) {
    std::vector<T> result;
    
    copy_if(
        std::istream_iterator<T>(file),
        std::istream_iterator<T>(),
        std::back_inserter(result),
        terminator<T>(term)
    );
    
    return result;
}



--------------------
Удалил аккаунт. Прощайте!
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.0470 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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