![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| stas52 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 25.10.2006 Репутация: нет Всего: нет |
Объязательно надо использовать Vector
Надо пройти по Массиву и найденные нолики поставить в начало массива. Я тут набросал кусочек. Понятное дело что он не работает. Подскажите пожалуйста как это сделать правильно (допустим используя Insert)
|
|||
|
||||
| Rockie |
|
||||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1143 Регистрация: 23.4.2006 Репутация: 8 Всего: 31 |
stas52, сначала добавляешь в свой Mas элементы, только положительные:
Потом подключаешь <algorithm> и пишешь
Выводишь наприме так:
Преподавателю рассказываешь что ты перевыполнил план и даже использовал алгоритмы. -------------------- Чтобы иметь большой гардероб - надо иметь большой гардероб. |
||||||
|
|||||||
| Xenon |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1529 Регистрация: 12.4.2006 Репутация: 11 Всего: 50 |
Rockie, а если без сортировки?
|
|||
|
||||
| Oleg_Ci |
|
|||
![]() Friend ![]() ![]() Профиль Группа: Участник Сообщений: 485 Регистрация: 28.5.2006 Где: Новосиб.обл. Репутация: 3 Всего: 30 |
алгоритм partition и stable_partition переставляет элементы в начало
Только первый может заменить "порядок следования" элементов
|
|||
|
||||
| ip127001 |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 164 Регистрация: 24.11.2006 Где: Omsk Репутация: -2 Всего: -1 |
а если удалять erase и добавлять insert в начало....мож получиться
Это сообщение отредактировал(а) ip127001 - 13.1.2007, 11:38 --------------------
aqua currit et debere currere ut currere solebat |
|||
|
||||
| Sartorius |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1568 Регистрация: 18.7.2006 Где: Ivory tower Репутация: 8 Всего: 37 |
Это сообщение отредактировал(а) Sartorius - 13.1.2007, 12:07 |
|||
|
||||
| zkv |
|
||||||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 26 Всего: 92 |
Oleg_Ci, я бы присудил вам пальму первенства в нахождении наиболее оптимального решения
Sartorius, пара моментов 1.
по моему, изменение счетчика внутри for далеко не лучший стиль программирования 2. почему бы не просто vect.erase( i ); 3.
может так лаконичнее?
PS Sartorius, ни в коем случае не воспринимайте как наезды |
||||||
|
|||||||
| Daevaorn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: 51 Всего: 70 |
||||
|
||||
| Sartorius |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1568 Регистрация: 18.7.2006 Где: Ivory tower Репутация: 8 Всего: 37 |
Daevaorn, zkv,
|
|||
|
||||
| stas52 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 25.10.2006 Репутация: нет Всего: нет |
Подскажите пожалуйста, что я делаю не так?
Я также пытался заменить строку Mas.erase(Mas.begin()+i); на Mas.erase(i); Тоже выдает ошибку. Если можно, хотелось бы попонятнее. |
|||
|
||||
| Daevaorn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: 51 Всего: 70 |
stas52,
|
|||
|
||||
| stas52 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 25.10.2006 Репутация: нет Всего: нет |
Так то работает. Спасибо. Но вот хотелось бы с "erase" т.к. мне таким же самым образом надо использовать потом и "Insert"
|
|||
|
||||
| Daevaorn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: 51 Всего: 70 |
||||
|
||||
| stas52 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 25.10.2006 Репутация: нет Всего: нет |
Ну и если я делаю так
i=Mas.begin(); while (i != Mas.end()) { if ((*i)==0) { Mas.erase(i); } i++; } в результате Microsoft Visual Studio выводит ошибку: Debug Assertion Failed! Program: d:\MY_BIG_ARHIV\My_Institut\C++\lrl\lrl\debug\lrl .exe File: c:\program files\microsoft visual studio 8\vc\include\vector Line: 117 Expression: ("this->Jvlycont != NULL", 0) For information on how your program can cause an assertion failure, see the Visual C++ documentation on asserts. (Press Retry to debug the application) |
|||
|
||||
| Daevaorn |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: 51 Всего: 70 |
и правильно делает, потому что ты удаляешь в цикле, а все итераторы после удаляемого становятся недействительны. Добавлено @ 16:14
|
||||
|
|||||
| stas52 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 25.10.2006 Репутация: нет Всего: нет |
Понял. Спасибо.
Сделал так. i=Mas.begin(); while (i != Mas.end()) { if ((*i)==0) { Mas.erase(i); i=Mas.begin(); } i++; } Надеюсь что это не полная глупость! |
|||
|
||||
| Daevaorn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: 51 Всего: 70 |
||||
|
||||
| Vyacheslav |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 9 Всего: 59 |
Ну если оставить "орфографию" оргинала, то оптимальнее выглядело бы так
Если же немного подправить, то так выглядит более привычно
Про конструкцию erase/remove здесь уже упоминали -------------------- С уважением, Вячеслав Ермолаев |
||||
|
|||||
| vdm |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 236 Регистрация: 16.10.2007 Репутация: нет Всего: нет |
Создал вектор:
Функция FunctionToDo вызывается бесконечно много раз. В программе в каком-то месте получаю "MEMORY LEAK", как думаете, не может ли это происходить здесь, так-как не удаляю вектор в конце ф-ции, после его использевания? Это сообщение отредактировал(а) vdm - 15.9.2008, 15:29 |
|||
|
||||
| Sartorius |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1568 Регистрация: 18.7.2006 Где: Ivory tower Репутация: 8 Всего: 37 |
||||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |