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

Материал из Весельчак У
Перейти к: навигация, поиск
 
(не показано 8 промежуточных версий этого же участника)
Строка 1: Строка 1:
−
===Не работает, сортировка(std::sort) контейнера указателей?===
+
==Ответы на часто задаваемые вопросы по [[STL]].==
−
std::sort сортирует контейнер применяя оператор < или less к элементам контенера в контенере лежат указатели и как следствие будут от сортированны именно указатели, если нужно, что при сортировке анализировали данные хранящиеся по указалелю, то в std::sort следует передать предикат сравнения который умеет, залазить в данные хранящиеся по указателю.
+
Составлено по материалам [http://forum.shelek.ru форума программистов].
−
вот простой пример:
+
−
<pre>
+
−
void print_elem(int* i)
+
−
{
+
−
std::cout << *i << "\n";
+
−
}
+
  
−
// предикат для сравнения данных хранящихся по указателю
 
−
template<class T>
 
−
bool ptr_less(const T* lhs, const T* rhs)
 
−
{
 
−
return *lhs < *rhs;
 
−
}
 
  
−
int _tmain(int argc, _TCHAR* argv[])
+
#[[FAQ:STL:сортировка контейнера указателей|Не работает, сортировка контейнера указателей (std::sort)?]]
−
{
+
#[[FAQ:STL:C++ сериализация данных|C++ сериализация данных]]
−
+
[[Category:FAQ]]
−
std::vector<int*> v_int;
+
[[Category:FAQ:STL]]
−
 
+
−
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 и т.д.)
+
−
Так же не следует забывать об очистке памяти
+

Текущая версия на 12:10, 4 октября 2009

Ответы на часто задаваемые вопросы по STL.

Составлено по материалам форума программистов.


  1. Не работает, сортировка контейнера указателей (std::sort)?
  2. C++ сериализация данных