Функция, применяемая к списку, изменяющая его
Есть список строк, нужно обойти его и из каждой строки убрать пробелы в начале и конце. Есть в QT какие-нибудь плюшки, чтобы можно было задать анонимную функцию и одним вызовом метода QList изменить всю коллекцию? Необязательно, чтобы это был именно список строк, меня в общем интересует возможность такой работы с коллекциями.
Вот, кстати, код, который делает то же самое, но через итератор. Может, кому-нибудь когда-нибудь пригодится.
Код:
QStringList list;
list << "a" << " b" << "c " << " d ";
QMutableStringListIterator iter(list);
while (iter.hasNext())
{
QString tmpStr = iter.next().trimmed();
iter.setValue(tmpStr);
}
list << "a" << " b" << "c " << " d ";
QMutableStringListIterator iter(list);
while (iter.hasNext())
{
QString tmpStr = iter.next().trimmed();
iter.setValue(tmpStr);
}
Ещё хотелось бы знать: есть ли плюшка, позволяющая передать в метод коллекции предикат, определяющий, есть ли в коллекции нужный элемент. То есть, что-то вроде contains<T>(bool predicat (T item)), как есть в C# с божественным LINQ.
Код:
//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);
//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);
Это немного не то, потому что не пользовательская функция. Да и решение у меня с итераторами есть. А за напоминание об STL спасибо. Кажется, там была нужная мне магия, но, увы, я не помню, как называется заклинание.