Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
KirillNSK
0 / 0 / 0
Регистрация: 29.07.2016
Сообщений: 58
#1

Удалить элемент вектора посредством erase

02.10.2016, 07:17. Просмотров 246. Ответов 7
Метки нет (Все метки)

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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# include <iostream>
# include <vector>
# include <iterator>
# include <string>
# include <fstream>
 
using namespace std;
 
int main ()
{
    vector <string> Pack;
    string Ts;
    
    vector <string> :: iterator Cnt;
    
 
    ifstream Out ("testpack.txt");
    {
    while (getline (Out, Ts))
        Pack.push_back (Ts);
    for (unsigned int i = 0; i < Pack.size (); i ++)
    
    Out.close ();
    }
    for (Cnt = Pack.begin (); Cnt != Pack.end (); Cnt ++)
    {
        
        if (Cnt -> at(0) == 'y')
        {
            Pack.erase (Cnt);
            Cnt = Pack.begin ();
            Cnt = Pack.end ();
            
            if (Pack.empty ()) break;
        }
    }
    for (Cnt = Pack.begin (); Cnt != Pack.end (); Cnt ++)
    {
        cout << *Cnt << endl;
    }
 
    cout << endl;
 
    system ("pause");
    return 0;
}

Все компилиться, но не удаляется

Добавлено через 38 минут
Забыл строку дописать, извините. Вот она: vtybbjbqj.
Не пойму, в чем дело. Может быть вектор после удаления элемента не считывается?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.10.2016, 07:17
Ответы с готовыми решениями:

Указатель на элемент вектора после операций insert/erase
есть вектор class player{ public: int number; }; //Здесь хранятся...

Не может удалить элемент из вектора
#include &lt;iostream&gt; #include &lt;vector&gt; #include &lt;ctime&gt; // function...

Error C3867 при вызове функции erase и insert для двумерного вектора
Тренируюсь с использованием контейнера std::vector. Появляется ошибка при...

Как применяя erase удалить в векторе n элементов, начиная с номера k?
Помогите, как это записать, чтобы не возникало ошибок? arr.erase(arr.begin()...

Переписать создание вектора посредством шаблона
Всем доброго времени суток. Ранее уже обращался на этот форум за помощью - и...

7
Invader0x7F
Helper C/C++
281 / 158 / 122
Регистрация: 22.09.2016
Сообщений: 518
Завершенные тесты: 5
02.10.2016, 07:54 #2
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# include <iostream>
# include <vector>
# include <iterator>
# include <string>
# include <fstream>
 
using namespace std;
 
int main()
{
    vector <string> Pack;
    string Ts;
 
    vector <string> ::iterator Cnt;
    
    ifstream Out("testpack.txt");
    {
        while (getline(Out, Ts))
            Pack.push_back(Ts);
 
        Out.close();
    }
 
    for (Cnt = Pack.begin(); Cnt != Pack.end(); Cnt++)
    {
        std::string::iterator it;
        for (it = Cnt->begin(); it != Cnt->end(); it++)
            if (*it == 'y') Cnt->erase(it);
    }
 
    for (Cnt = Pack.begin(); Cnt != Pack.end(); Cnt++)
    {
        cout << *Cnt << endl;
    }
 
    cout << endl;
 
    system("pause");
    return 0;
}
1
KirillNSK
0 / 0 / 0
Регистрация: 29.07.2016
Сообщений: 58
02.10.2016, 07:59  [ТС] #3
А зачем второй итератор std::string::iterator it ?
Без него никак?
0
Invader0x7F
Helper C/C++
281 / 158 / 122
Регистрация: 22.09.2016
Сообщений: 518
Завершенные тесты: 5
02.10.2016, 08:01 #4
Начиная с С++14:
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
27
28
29
30
31
32
33
34
35
# include <iostream>
# include <vector>
# include <iterator>
# include <string>
# include <fstream>
 
using namespace std;
 
int main()
{
    vector <string> Pack;
    string Ts;
 
    ifstream Out("testpack.txt");
    {
        while (getline(Out, Ts))
            Pack.push_back(Ts);
 
        Out.close();
    }
 
    for (auto Cnt = Pack.begin(); Cnt != Pack.end(); Cnt++)
        for (auto it = Cnt->begin(); it != Cnt->end(); it++)
            if (*it == 'y') Cnt->erase(it);
 
    for (Cnt = Pack.begin(); Cnt != Pack.end(); Cnt++)
    {
        cout << *Cnt << endl;
    }
 
    cout << endl;
 
    system("pause");
    return 0;
}
1
nmcf
6271 / 5577 / 2537
Регистрация: 14.04.2014
Сообщений: 23,468
02.10.2016, 08:40 #5
Так нужно символы y удалить из всех строк или сами строки, которые начинаются с y?

Invader0x7F, ты слишком вольно с итераторами обращаешься. Твой вариант некорректный.
C++
1
2
3
4
5
6
7
    for (Cnt = Pack.begin(); Cnt != Pack.end(); Cnt++)
    {
        std::string::iterator it;
        for (it = Cnt->begin(); it != Cnt->end();)
            if (*it == 'y') it = Cnt->erase(it);
            else ++it;
    }
1
GbaLog-
Любитель чаепитий
3164 / 1470 / 465
Регистрация: 24.08.2014
Сообщений: 5,200
Записей в блоге: 1
Завершенные тесты: 2
02.10.2016, 11:16 #6
Invader0x7F, Не вижу тут ничего из С++14, даже из С++11 ничего не нету, кроме auto.
Плюс у тебя все итераторы слетят после вот этой строки:
C++
1
Cnt->erase(it);
Добавлено через 12 минут
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
27
28
29
30
31
32
33
34
35
36
/////////////////////////////////////////////////////////////////////
// Удалить элемент вектора посредством erase
/////////////////////////////////////////////////////////////////////
#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
#include <fstream>
/////////////////////////////////////////////////////////////////////
int main()
{
    std::vector<std::string> pack;
    
    std::ifstream f_in( "testpack.txt" );
    
    std::string tmp{};
    while( std::getline( f_in, tmp ) )
        pack.push_back( tmp );
    f_in.close();
    
    auto it = pack.begin();
    for( ; it != pack.end(); ++it )
    {
        if( it->find( 'y' ) != std::string::npos )
        {
            it = pack.erase( it );
        }
    }
    
    for( const auto& i : pack )
    {
        std::cout
            << i
            << std::endl;
    }
}
0
KirillNSK
0 / 0 / 0
Регистрация: 29.07.2016
Сообщений: 58
02.10.2016, 11:32  [ТС] #7
Нужно символ 'y' удалить из строки.
0
GbaLog-
Любитель чаепитий
3164 / 1470 / 465
Регистрация: 24.08.2014
Сообщений: 5,200
Записей в блоге: 1
Завершенные тесты: 2
02.10.2016, 11:44 #8
Цитата Сообщение от KirillNSK Посмотреть сообщение
C++
1
Pack.erase (Cnt);
У Вас тут у самого удаляется элемент вектора. Конкретней надо было задание делать!

Добавлено через 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
27
28
29
30
31
32
33
34
/////////////////////////////////////////////////////////////////////
// Удалить элемент вектора посредством erase
/////////////////////////////////////////////////////////////////////
#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
#include <fstream>
/////////////////////////////////////////////////////////////////////
int main()
{
    std::vector<std::string> pack;
    
    std::ifstream f_in( "testpack.txt" );
    
    std::string tmp{};
    while( std::getline( f_in, tmp ) )
        pack.push_back( tmp );
    f_in.close();
    
    for( auto& it : pack)
    {
        std::string::size_type idx{};
        while( (idx = it.find( 'y' )) != std::string::npos )
            it.erase( idx, 1 );
    }
    
    for( const auto& i : pack )
    {
        std::cout
            << i
            << std::endl;
    }
}
1
02.10.2016, 11:44
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.10.2016, 11:44

Как реализовать матрицу посредством двумерного вектора? (std::vector)
const int matrix_A_Columns = 12000; const int matrix_A_Rows = 25000; double...

Определить количество положительных элементов вектора С(10) и заменить этим значением минимальный элемент вектора А(5)
Ребята помогите пожалуйста с задачкой. Я сам не шарю в C++, но в этом семестре...

Изменение вектора. Наибольший элемент вектора
Добрый день, нужна оценка кода. Пропустил занятия, делал по теории, опирался на...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru