| 
							Вад
							
						 | 
						
							
								  | 
								
									
									 « Ответ #30 : 25-05-2010 07:02 »   | 
								
								 | 
							  
							 
							Алексей1153++, Вад, не понял чего вам не понравилось
  А мне не не понравилось    Это раз уж Лёша начал по-научному извращаться, то я свои пять копеек вставил.  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							RXL
							
						 | 
						
							
								  | 
								
									
									 « Ответ #31 : 25-05-2010 07:16 »   | 
								
								 | 
							  
							 
							Таки что порекомендуете использовать вместо std::vector, когда нужен динамический массив? 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С. 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							Алексей++
							
								глобальный и пушистый 
								Глобальный модератор
								
								 
								  Offline
								
								Сообщений: 13
								
								
								
								
								
							  
						 | 
						
							
								  | 
								
									
									 « Ответ #32 : 25-05-2010 07:55 »   | 
								
								 | 
							  
							 
							так можно и динамический массив. Но это возня с выделением и удалением в конструкторе/деструкторе и в других местах класса. А вектор объявил и почти забыл    
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Антон (LogRus)
							
						 | 
						
							
								  | 
								
									
									 « Ответ #33 : 25-05-2010 07:57 »   | 
								
								 | 
							  
							 
							RXL, я предпочитаю дек для хранения крупных объектов, а вектор в основном, как промежуточное хранилище для передачи по сети сложных объектов вообще каждый случай индивидуален, поэтому .... вектор я не люблю использовать из повышенных требований к наличию непрерывного блока памяти, когда у тебя данных сотни мегабайт, это может быть важно push_back приводит к реалокациям, а реалокация на фоне new в соседнем потоке фрагментирует память вообще, я его недолюбливаю из-за особенностей моей работы, а не от того что он весь такой плохой просто мне он неподходит 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							Странно всё это.... 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							Алексей++
							
								глобальный и пушистый 
								Глобальный модератор
								
								 
								  Offline
								
								Сообщений: 13
								
								
								
								
								
							  
						 | 
						
							
								  | 
								
									
									 « Ответ #34 : 25-05-2010 08:06 »   | 
								
								 | 
							  
							 
							push_back приводит к реалокациям,
  так push_back использовать необязательно же, можно работать как с обычным массивом, зарезервировав память заранее  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Антон (LogRus)
							
						 | 
						
							
								  | 
								
									
									 « Ответ #35 : 25-05-2010 09:54 »   | 
								
								 | 
							  
							 
							можно, но не всегда удобно, особенно, если ты не знаешь сколько данных будет загружено и они могут загружаться после начальной загрузки в неограниченном объёме 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							Странно всё это.... 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							Алексей++
							
								глобальный и пушистый 
								Глобальный модератор
								
								 
								  Offline
								
								Сообщений: 13
								
								
								
								
								
							  
						 | 
						
							
								  | 
								
									
									 « Ответ #36 : 25-05-2010 10:03 »   | 
								
								 | 
							  
							 
							LogRus, ну это как раз уже то, что "другая задача" 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							RXL
							
						 | 
						
							
								  | 
								
									
									 « Ответ #37 : 25-05-2010 10:33 »   | 
								
								 | 
							  
							 
							selectedWorkers.erase(std::find(selectedWorkers.begin(), selectedWorkers.end(), key));
  Здесь selectedWorkers представляет собой std::CONTAINER<int>. Задача - удалить элемент со значением key из списка. Попробовал заменить CONTAINER c vector на deque и получил ошибку компиляции: template argument _InputIter passed to 'find' is a output iterator: input iterator required Не пойму, что я тут не так сделал... Вроде как deque имеет тот же интерфейс, что и vector, но немного расширенный для работы с началом списка. UPD: отбой - это предупреждения, а не ошибки. Видимо в BCB6 кривая реализация STL.  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
									« Последнее редактирование: 25-05-2010 11:34 от RXL »
								 | 
								
									 
									Записан
								 | 
							  
							 
							... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С. 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							Алексей++
							
								глобальный и пушистый 
								Глобальный модератор
								
								 
								  Offline
								
								Сообщений: 13
								
								
								
								
								
							  
						 | 
						
							
								  | 
								
									
									 « Ответ #38 : 25-05-2010 11:06 »   | 
								
								 | 
							  
							 
							#include <deque> #include <algorithm>
  std::deque<int> selectedWorkers;
  selectedWorkers.erase(std::find(selectedWorkers.begin(), selectedWorkers.end(), 7));
 
  а у меня скомпилировалось  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Rustam
							 
								Гость 
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #39 : 25-05-2010 11:09 »   | 
								
								 | 
							  
							 
							не отходите далеко от темы ребята =) 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Антон (LogRus)
							
						 | 
						
							
								  | 
								
									
									 « Ответ #40 : 25-05-2010 11:14 »   | 
								
								 | 
							  
							 
							RXL, что за компилятор и STL?
  если тебе нужно добавлять и удалять числа, то может просто использовать set? 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							Странно всё это.... 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Антон (LogRus)
							
						 | 
						
							
								  | 
								
									
									 « Ответ #41 : 25-05-2010 11:14 »   | 
								
								 | 
							  
							 
							Rustam, ну проблему решили можно и поболтать    
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							Странно всё это.... 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							RXL
							
						 | 
						
							
								  | 
								
									
									 « Ответ #42 : 25-05-2010 11:35 »   | 
								
								 | 
							  
							 
							LogRus, не, мне нужен упорядоченный список. Выше я написал - это оказалось некритичным предупреждением. Сейчас попробую, как работает.
  Замена vector на deque у меня работает. 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
									« Последнее редактирование: 25-05-2010 11:37 от RXL »
								 | 
								
									 
									Записан
								 | 
							  
							 
							... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С. 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Антон (LogRus)
							
						 | 
						
							
								  | 
								
									
									 « Ответ #43 : 25-05-2010 12:07 »   | 
								
								 | 
							  
							 
							LogRus, не, мне нужен упорядоченный список. Выше я написал - это оказалось некритичным предупреждением. Сейчас попробую, как работает.
  Замена vector на deque у меня работает.
  ну у меня предупреждений а кто сказал, что set нельзя как упорядоченный список использовать?    
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							Странно всё это.... 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							RXL
							
						 | 
						
							
								  | 
								
									
									 « Ответ #44 : 25-05-2010 13:58 »   | 
								
								 | 
							  
							 
							LogRus, пока не вижу в описании std::set, что это упорядоченный список...
  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С. 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Антон (LogRus)
							
						 | 
						
							
								  | 
								
									
									 « Ответ #45 : 25-05-2010 16:37 »   | 
								
								 | 
							  
							 
							std::set<int> s; for(std::set<int>::iterator it=s.begin(); it != s.end(); ++it) {    ................ }
  так вот: итератор возвращает элементы в порядке возрастания чем не список?   пример:  http://cplusplus.com/reference/stl/set/begin/ 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							Странно всё это.... 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							RXL
							
						 | 
						
							
								  | 
								
									
									 « Ответ #46 : 25-05-2010 16:41 »   | 
								
								 | 
							  
							 
							Наверно я не так выразился: под упорядоченным я имел в виду не сортированный, а в порядке помещения элементов в контейнер. Ассоциативные контейнеры не могут обеспечить тот же порядок без дополнительной поддержки. 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
									« Последнее редактирование: 25-05-2010 16:43 от RXL »
								 | 
								
									 
									Записан
								 | 
							  
							 
							... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С. 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Антон (LogRus)
							
						 | 
						
							
								  | 
								
									
									 « Ответ #47 : 25-05-2010 17:08 »   | 
								
								 | 
							  
							 
							стоп, если он не отсортированный, то код не рабочий selectedWorkers.erase(std::find(selectedWorkers.begin(), selectedWorkers.end(), 7));
   
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							Странно всё это.... 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							RXL
							
						 | 
						
							
								  | 
								
									
									 « Ответ #48 : 25-05-2010 17:16 »   | 
								
								 | 
							  
							 
							С чего бы он вдруг стал нерабочий?
  1. std::find(selectedWorkers.begin(), selectedWorkers.end(), 7) Возвращает итератор, указывающий на элемент со значением 7.
  2. selectedWorkers.erase(.....) Удаляет элемент по итератору.
  Все согласно спецификации STL для последовательных контейнеров. Кстати, работает. 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С. 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Антон (LogRus)
							
						 | 
						
							
								  | 
								
									
									 « Ответ #49 : 25-05-2010 17:34 »   | 
								
								 | 
							  
							 
							потому, что find работает, только с отсортированными диапазонами  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							Странно всё это.... 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Антон (LogRus)
							
						 | 
						
							
								  | 
								
									
									 « Ответ #50 : 25-05-2010 17:37 »   | 
								
								 | 
							  
							 
							а нет гоню, find работает любых массивах т.к. он использует простой перебор элементов, что ИМХО ацтой, хотя задачи бывают разные    
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							Странно всё это.... 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							Алексей++
							
								глобальный и пушистый 
								Глобальный модератор
								
								 
								  Offline
								
								Сообщений: 13
								
								
								
								
								
							  
						 | 
						
							
								  | 
								
									
									 « Ответ #51 : 25-05-2010 17:44 »   | 
								
								 | 
							  
							 
							LogRus, хм, вот только хотел написать, что с вполне неупорядоченным вектором find работает )) 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
									« Последнее редактирование: 25-05-2010 17:49 от Алексей1153++ »
								 | 
								
									 
									Записан
								 | 
							  
							 
							
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Антон (LogRus)
							
						 | 
						
							
								  | 
								
									
									 « Ответ #52 : 25-05-2010 17:45 »   | 
								
								 | 
							  
							 
							давно не пользовался, всё больше индексы и ассоциативные контейнеры, уже и забыл про простой перебор 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							Странно всё это.... 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							RXL
							
						 | 
						
							
								  | 
								
									
									 « Ответ #53 : 25-05-2010 18:07 »   | 
								
								 | 
							  
							 
							Пока я тут читал доки, вы уже разобрались... Но, все же, чтобы добру не пропадать привожу тест. #include <stdio.h> #include <vector> #include <algorithm>
  typedef std::vector<int> list_int_t;
  void print_list(list_int_t &list) {     list_int_t::iterator it;
      for (it = list.begin(); it != list.end(); it++)         printf("%d ", *it);
      puts(""); }
  int main() {     list_int_t list;
      // Заполняем список.     list.push_back(5);     list.push_back(4);     list.push_back(3);     list.push_back(7);     list.push_back(2);     list.push_back(8);     list.push_back(1);     list.push_back(7);
      // Выводим начальное состояние списка.     puts("Вывод содержимого списка (1)");     print_list(list);
      // Удаляем элемент со значением 7.     list.erase(find(list.begin(), list.end(), 7));
      // Выводим конечное состояние списка.     puts("Вывод содержимого списка (2)");     print_list(list);
      return 0; }
  $ g++ -Wall -o t2 t2.cpp $ ./t2
  Вывод содержимого списка (1) 5 4 3 7 2 8 1 7 Вывод содержимого списка (2) 5 4 3 2 8 1 7
  У меня под рукой книженция "STL. Карманный справочник." (ISBN 5-469-00389-2): Некоторое количество алгоритмов требует отсортированных интервалов или иначе использует функции сравнения для проверки отношений «меньше». ... Не знаю, может это имеет отношение к нашему вопросу...  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
									« Последнее редактирование: 25-05-2010 18:15 от RXL »
								 | 
								
									 
									Записан
								 | 
							  
							 
							... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С. 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							RXL
							
						 | 
						
							
								  | 
								
									
									 « Ответ #54 : 25-05-2010 18:17 »   | 
								
								 | 
							  
							 
							Я тоже предпочитаю map, но если нет уникального ключа или нужен определенный порядок хранения, то использую vector (теперь уже deque). 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С. 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Вад
							
						 | 
						
							
								  | 
								
									
									 « Ответ #55 : 25-05-2010 18:21 »   | 
								
								 | 
							  
							 
							Я тоже предпочитаю map, но если нет уникального ключа или нужен определенный порядок хранения, то использую vector (теперь уже deque).
  Для таких случаев есть multiset и multimap, не требующие уникального ключа.  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							RXL
							
						 | 
						
							
								  | 
								
									
									 « Ответ #56 : 25-05-2010 18:29 »   | 
								
								 | 
							  
							 
							Но с ними не так удобно работать, как с map и vector. Затрудняюсь найти им применение в своей практике. 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С. 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							Алексей++
							
								глобальный и пушистый 
								Глобальный модератор
								
								 
								  Offline
								
								Сообщений: 13
								
								
								
								
								
							  
						 | 
						
							
								  | 
								
									
									«  Ответ #57 : 25-05-2010 18:36 »    | 
								
								 | 
							  
							 
							я multimap применял, когда в качестве ключа использовалось время. Могло повторяться ) 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							
						 | 
					 
				 
			 |  
		 
	 | 
	 |