C ++. Самый эффективный способ удалить дополнительные последовательные повторяющиеся строки?

Есть много вопросов, как удалить просто повторяющиеся строки:

ссылка на сайт

но мой вопрос отличается от них.

Например, если у меня есть запись vector<string>:

{"111", "222", "222", "222", "333", "222"}

Мне нужно получить следующий результат:

{"111", "222", "333", "222"}

это означает удаление только повторяющихся значений рядом.

Мое текущее временное решение — создать еще один вектор, скопировать каждый элемент из вектора входа с проверкой, не равен ли этот элемент последнему элементу второго вектора.

0

Решение

Вот пример, адаптированный из станд :: Уникальный страница:

bool comp (std::string &i, std::string &j) {
return (i==j);
}

int main () {
std::string mys[] = {"111", "222", "222", "222", "333", "222"};
std::vector<std::string> myvector (mys,mys+6);
myvector.erase(std::unique (myvector.begin(), myvector.end(), comp), myvector.end());
return 0;
}

и ссылка на оригинальный код:

http://www.cplusplus.com/reference/algorithm/unique/

ОБНОВИТЬ

Как предлагается в комментариях, вы можете пропустить метод сравнения, но имейте в виду, что вы можете использовать его, если объекты в векторе не имеют == . Я просто привел этот пример, потому что он завершен на 100% и может быть легко распространен на другие типы объектов.

ОБНОВЛЕНИЕ 2

Да, и вы должны стереть последнюю часть вектора, потому что, как говорит док, уникальный Метод вернет «итератор элемента, который должен рассматриваться как его новый элемент конца-в-конце»

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]