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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 29, средняя оценка - 4.79
Tiva
94 / 94 / 1
Регистрация: 25.04.2012
Сообщений: 429
#1

итераторы вектора - C++

06.11.2012, 18:26. Просмотров 4185. Ответов 6
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <tchar.h>
#include <iostream>
#include <vector>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
    vector <int> a;
    vector <int>::iterator cur;
    int itemp;
    int i;
    char temp;
    for(i=0; temp!='n'; i++)
    {
        cin>>temp;
        itemp=temp-'0';
        a.push_back(itemp);
    }  
    for(cur=a.begin(); cur<a.end(); cur++)
        if(cur==cur+1) a.erase(cur+1);
    
    for(cur=a.begin(); cur<a.end(); cur++)
        cout<<*cur<<" ";
    cout<<endl;
    system("pause");
    return 0;
}
почему код работает не верно?
выводит совсем другие элементы, не те что я вводил и не удаляет повторяющиеся элементы в массиве
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.11.2012, 18:26     итераторы вектора
Посмотрите здесь:

Итераторы и обратные итераторы C++
C++ Итераторы
Итераторы в C++ C++
Итераторы C++
C++ Итераторы
итераторы си++ C++
итераторы C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DiffEreD
1427 / 764 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
06.11.2012, 18:32     итераторы вектора #2
А чем вам вообще вектор заполнить надо - числами или символами?
Tiva
94 / 94 / 1
Регистрация: 25.04.2012
Сообщений: 429
06.11.2012, 18:42  [ТС]     итераторы вектора #3
числами, и удалить из массива повторяющиеся последовательности, оставив только один символ
было 11111222233444555
станет 12345
gray_fox
What a waste!
1253 / 1136 / 54
Регистрация: 21.04.2012
Сообщений: 2,359
Завершенные тесты: 3
06.11.2012, 19:34     итераторы вектора #4
Вот это точно не верно:
Цитата Сообщение от Tiva Посмотреть сообщение
C++
1
2
for(cur=a.begin(); cur<a.end(); cur++)
   if(cur==cur+1) a.erase(cur+1);
Должно быть что-нибудь вроде:
C++
1
2
3
4
5
6
7
for (cur = a.begin(); cur + 1 < a.end(); ) {
   if (*cur == *(cur + 1)) {
      a.erase(cur);
   } else {
      ++cur;
   }
]
DiffEreD
1427 / 764 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
06.11.2012, 19:42     итераторы вектора #5
А еще лучше воспользоваться set-ом:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <set>
using std::cout;
using std::cin;
using std::endl;
 
int main()
{
    std::set <int> a;
    std::set <int>::iterator cur;
    char temp;
 
    for(int i = 0; cin>>temp, temp!='n'; i++)
        a.insert(temp-'0');
    
    for(cur=a.begin(); cur!=a.end(); cur++)
        cout<<*cur<<" ";
    
    cout<<endl;
    system("pause");
    return 0; 
}
gray_fox
What a waste!
1253 / 1136 / 54
Регистрация: 21.04.2012
Сообщений: 2,359
Завершенные тесты: 3
06.11.2012, 19:46     итераторы вектора #6
Цитата Сообщение от yuron_477 Посмотреть сообщение
А еще лучше воспользоваться set-ом:
Ну
C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
#include <algorithm>
#include <iterator>
 
 
int main() {
   std::unique_copy(
         std::istream_iterator<char>(std::cin),
         std::istream_iterator<char>(),
         std::ostream_iterator<char>(std::cout));
}
http://ideone.com/gsSgvT#view_edit_box
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.11.2012, 12:29     итераторы вектора
Еще ссылки по теме:

C++ Итераторы
C++ Не получается использовать итераторы вектора в качестве итераторов своего класса
C++ Итераторы С++
C++ Итераторы

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

Или воспользуйтесь поиском по форуму:
Ptomaine
13 / 13 / 0
Регистрация: 22.10.2011
Сообщений: 35
07.11.2012, 12:29     итераторы вектора #7
Как уже сказали, вместо vector используй set<int>, если последовательность поступления значений не важна, то есть, если допускается сортировка.

Если сортировка не допустима, то вот так будет работать:

C++
1
2
    for (std::vector<int>::iterator cur(a.begin()); cur != a.end() && cur + 1 != a.end(); )
        if (*cur == *(cur + 1)) a.erase(cur + 1); else ++cur;
И ещё, переменную temp сделай типа int и убери " temp - '0' ", оставь только temp. Просто istream (как впрочем и ostream) умеет преобразовывать данные в нужные типы. Если нужны именно цифры, а не числа, то при добавлении в вектор сделай так " temp % 10 ".
Yandex
Объявления
07.11.2012, 12:29     итераторы вектора
Ответ Создать тему
Опции темы

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