Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.75
booker
 Аватар для booker
23 / 23 / 2
Регистрация: 21.11.2012
Сообщений: 106
#1

vector::erase()? - C++

30.12.2012, 12:53. Просмотров 1466. Ответов 30
Метки нет (Все метки)

есть вектор структур

C++
1
2
3
4
5
struct person{
    string name;
    int age;
 
vector <person> repw;
задача отсортировать вектор так, чтобы каждый последующий контейнер при условии совпадений поля name был удалён.

пытаюсь так

C++
1
2
3
4
int it1,it2;
    for (it1 = 0;it1!=repw.size();it1++)
        for (it2 = it1+1;it2!=repw.size();it2++)
            if(repw[it1].name==repw[it2].name) repw.erase(repw.begin()+it2);
не выходит. С итераторами колдовать?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
-=ЮрА=-
Заблокирован
Автор FAQ
30.12.2012, 16:14     vector::erase()? #21
PS:booker, вот тебе хороший ресурс (не бери в голову что он на английском) там всё четко и с необходимыми примерами http://www.cplusplus.com/reference/v...ector/operator[]/ - в частности индексация. Кроме индексации кстати есть ещё метод std::vector.at - тоже интересная штучка http://www.cplusplus.com/reference/vector/vector/at/
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
go
30.12.2012, 18:33
  #22

Не по теме:

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
захочешь потом перейдёшь на итераторы это всегда можно успеть сделать
к списку тоже будете по индексации обращаться?

Wolkodav
 Аватар для Wolkodav
601 / 454 / 32
Регистрация: 18.09.2012
Сообщений: 1,685
31.12.2012, 12:37     vector::erase()? #23
Это кстати касяк с листом, там очень не хватает индиксатора!! После C# особенно трудно понять почему С++ ругается на [] в листе.
BumerangSP
 Аватар для BumerangSP
4283 / 1405 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
31.12.2012, 12:40     vector::erase()? #24
Wolkodav, в чем проблема, можно перегрузить
gray_fox
What a waste!
 Аватар для gray_fox
1250 / 1133 / 54
Регистрация: 21.04.2012
Сообщений: 2,357
Завершенные тесты: 3
31.12.2012, 12:41     vector::erase()? #25
Цитата Сообщение от Wolkodav Посмотреть сообщение
Это кстати касяк с листом, там очень не хватает индиксатора!!
Индексировать список - как минимум странная идея - у этой операции будет линейная сложность.
Avazart
 Аватар для Avazart
7037 / 5214 / 259
Регистрация: 10.12.2010
Сообщений: 22,904
Записей в блоге: 17
31.12.2012, 13:29     vector::erase()? #26
Цитата Сообщение от Wolkodav Посмотреть сообщение
Это кстати касяк с листом, там очень не хватает индиксатора!! После C# особенно трудно понять почему С++ ругается на [] в листе.
На то он и C# что там не думают про эффективность...

Если вам нужна индексация и вы используете std::list это значит что вы не правильно выбрали контейнер.

В любом случае можно легко сначала использовать лист, а нужном месте перейти на вектор, путем копирования одного в другое.
go
Эксперт C++
3584 / 1364 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
31.12.2012, 13:38     vector::erase()? #27
Цитата Сообщение от Wolkodav Посмотреть сообщение
почему С++ ругается на [] в листе.
А какая там индексация? Это список, который мы привыкли видеть. В шарпе лиск это аналог вектора в С++
Wolkodav
 Аватар для Wolkodav
601 / 454 / 32
Регистрация: 18.09.2012
Сообщений: 1,685
31.12.2012, 18:13     vector::erase()? #28
Как и знал, что моя реплика вызовет просто кучу негодования непонимания и лучше бы я это не писал(
Avazart
 Аватар для Avazart
7037 / 5214 / 259
Регистрация: 10.12.2010
Сообщений: 22,904
Записей в блоге: 17
31.12.2012, 20:34     vector::erase()? #29
и лучше бы я это не писал(
Конечно, потому как она говорит что вы чет не понимаете...вот все и пытаются объяснить..
Wolkodav
 Аватар для Wolkodav
601 / 454 / 32
Регистрация: 18.09.2012
Сообщений: 1,685
31.12.2012, 21:16     vector::erase()? #30
Я говорю о том, что при переходе от C# к С++ в ходе работы возникают некоторые забавные ситуации и что хотелось бы что бы их было меньше путём добавления еще чего-то, не столь обременительного, но порой невредного.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.12.2012, 21:21     vector::erase()?
Еще ссылки по теме:

C++ Ошибка “vector<bool> erase iterator outside range” при работе алгоритма Хаффмана
C++ Struct / Vector / Expression: vector subscript out of range
C++ При include<vector> не включает и не видит vector
Ошибка [Linker error] undefined reference to `Vector::Vector(int)' C++
C++ Ошибка при использовании erase для std::vector

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Avazart
 Аватар для Avazart
7037 / 5214 / 259
Регистрация: 10.12.2010
Сообщений: 22,904
Записей в блоге: 17
31.12.2012, 21:21     vector::erase()? #31
Да нет смысла таскать код туда сюда... так как языки различны и различные подходы...
Yandex
Объявления
31.12.2012, 21:21     vector::erase()?
Ответ Создать тему
Опции темы

Текущее время: 01:51. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru