Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Функция, применяемая к списку, изменяющая его

414
04 сентября 2013 года
CassandraDied
763 / / 24.05.2012
Хай.
Есть список строк, нужно обойти его и из каждой строки убрать пробелы в начале и конце. Есть в QT какие-нибудь плюшки, чтобы можно было задать анонимную функцию и одним вызовом метода QList изменить всю коллекцию? Необязательно, чтобы это был именно список строк, меня в общем интересует возможность такой работы с коллекциями.
Вот, кстати, код, который делает то же самое, но через итератор. Может, кому-нибудь когда-нибудь пригодится.

 
Код:
QStringList list;
list << "a" << " b" << "c " << " d ";
QMutableStringListIterator iter(list);
while (iter.hasNext())
{
  QString tmpStr = iter.next().trimmed();
  iter.setValue(tmpStr);
}
414
04 сентября 2013 года
CassandraDied
763 / / 24.05.2012
Ещё хотелось бы знать: есть ли плюшка, позволяющая передать в метод коллекции предикат, определяющий, есть ли в коллекции нужный элемент. То есть, что-то вроде contains<T>(bool predicat (T item)), как есть в C# с божественным LINQ.
326
05 сентября 2013 года
sadovoya
757 / / 19.11.2005
Не сталкивался. Но, к коллекциям можно применить генеральные алгоритмы (Qt-ские и STL). В некоторые из них можно свои ф-ции передавать. Например, в qSort последним параметром можно свой принцип сравнения передать.

Код:
//We can use the third parameter to define custom sort criteria. For example,
  //here is a 'less than' comparison function that compares QStrings in a case-
  //insensitive way:
  //
   bool insensitiveLessThan(const QString &str1, const QString &str2)
    {
        return str1.toLower() < str2.toLower();
    }
 
  //The call to qSort() then becomes:
 
    QStringList list;
   ...
   qSort(list.begin(), list.end(), insensitiveLessThan);
P.S. О циклах над коллекциями: есть foreach.
414
05 сентября 2013 года
CassandraDied
763 / / 24.05.2012
Это немного не то, потому что не пользовательская функция. Да и решение у меня с итераторами есть. А за напоминание об STL спасибо. Кажется, там была нужная мне магия, но, увы, я не помню, как называется заклинание.
transform почти то, что нужно. Ну, видимо без явного указания итераторов вообще нигде не обойтись, но хотя бы функцию свою можно задать.
А поиск по коллекции можно сделать с использованием remove_if, если он всё-таки не изменяет исходную коллекцию, хех.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог