FAQ:STL — различия между версиями

Материал из Весельчак У
Перейти к: навигация, поиск
м (1 версия)
(Ветвление FAQ:STL)
Строка 1: Строка 1:
===Не работает, сортировка(std::sort) контейнера указателей?===
+
===Вопросы и ответы по STL.===
std::sort сортирует контейнер применяя оператор < или less к элементам контенера в контенере лежат указатели и как следствие будут от сортированны именно указатели, если нужно, что при сортировке анализировали данные хранящиеся по указалелю, то в std::sort следует передать предикат сравнения который умеет, залазить в данные хранящиеся по указателю.
+
вот простой пример:
+
<pre>
+
void print_elem(int* i)
+
{
+
std::cout << *i << "\n";
+
}
+
  
// предикат для сравнения данных хранящихся по указателю
+
* Не работает, [[FAQ:STL|сортировка контейнера указателей]] (std::sort)?
template<class T>
+
bool ptr_less(const T* lhs, const T* rhs)
+
{
+
return *lhs < *rhs;
+
}
+
  
int _tmain(int argc, _TCHAR* argv[])
 
{
 
 
std::vector<int*> v_int;
 
 
for (int i=0; i < 10; ++i)
 
v_int.push_back(new int(10-i));
 
 
std::cout << "Before sort:\n";
 
std::for_each(v_int.begin(),v_int.end(),&print_elem);
 
 
std::sort(v_int.begin(),v_int.end());
 
std::cout << "After simple sort:\n";
 
std::for_each(v_int.begin(),v_int.end(),&print_elem);
 
 
std::sort(v_int.begin(),v_int.end(),&ptr_less<int>);
 
std::cout << "After sort:\n";
 
std::for_each(v_int.begin(),v_int.end(),&print_elem);
 
return 0;
 
}
 
</pre>
 
 
эту особенность работы алгоритмов STL нужно учитывать и при работе с другими алгоритмами(find, lower_bound, equival_range и т.д.)
 
Так же не следует забывать об очистке памяти
 
  
 
[[Category:FAQ]]
 
[[Category:FAQ]]
 +
[[Category:FAQ:STL]]

Версия 21:16, 28 июля 2008

Вопросы и ответы по STL.

  • Не работает, сортировка контейнера указателей (std::sort)?