Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
 
Valentina
68 / 68 / 3
Регистрация: 13.05.2012
Сообщений: 130
#1

Удаление элементов из вектора - C++

16.07.2013, 12:49. Просмотров 971. Ответов 20
Метки нет (Все метки)

Что я делаю не так
C++
1
2
3
4
5
6
string f="/.+(STL).$1/";
   vector<string> words;
   words.push_back(f);
   vector< string >::iterator first = find( words. begin(), words.end(), "+" );
   vector< string >::iterator last =find( words. begin(), words.end(), "1" );
 words.erase(first,last);
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.07.2013, 12:49
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Удаление элементов из вектора (C++):

Удаление элементов вектора - C++
как вызвать деструктор? почему не удаляется объект class a { public: a() { std::cout &lt;&lt; &quot;c&quot;; } ~a() { std::cout &lt;&lt;...

Удаление элементов вектора - C++
Дана матрица смежности, мне нужно удалить из нее вершину. Это значит, что при удалении вершины номер 3 мне нужно из матрицы удалить 3...

Удаление элементов из вектора - C++
С консоли вводится вектор значений double и точность, удалить и вектора элементы разность между которыми по модулю меньше точности и...

Удаление элементов вектора - C++
Я конечно понимаю, что вектор это такая штука, которая удаляется сама при выходе из функции в которой она определена. Но мне все же...

Удаление одинаковых элементов вектора - C++
Здравствуйте. Нужно удалить из вектора одинаковые элементы. Вектор состоит из стрингов и это надо делать без сортировки.

Удаление всех элементов вектора - C++
Как удалить все элементы вектора. Например Создаём пустой вектор vector&lt;int&gt;numb; заполняем его пятью элементами ...

20
Jupiter
Каратель
Эксперт С++
6559 / 3980 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
16.07.2013, 12:50 #2
Valentina, а что не так?
0
Croessmah
Ушел
Эксперт CЭксперт С++
13553 / 7704 / 872
Регистрация: 27.09.2012
Сообщений: 19,006
Записей в блоге: 3
Завершенные тесты: 1
16.07.2013, 12:55 #3
Цитата Сообщение от Jupiter Посмотреть сообщение
Valentina, а что не так?
Думаю, необходимо в строке найти символы + и 1 и удалить все то между ними но это так...пробую телепатию )))
0
Kukurudza
105 / 86 / 6
Регистрация: 29.08.2012
Сообщений: 539
16.07.2013, 12:58 #4
Croessmah думаю вы правы ага
автор, если это так, то выкиньте вектор и поищите прям в вашей строке f. то же самое сделайте.
0
Valentina
68 / 68 / 3
Регистрация: 13.05.2012
Сообщений: 130
16.07.2013, 13:13  [ТС] #5
У меня данная програма выдает туже строку, то есть ничего не удалянтся
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
#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
    setlocale (LC_CTYPE,"rus");
    
   string f="/.+(STL).$1/";
   vector<string> words;
   words.push_back(f);
   vector< string >::iterator first = find( words. begin(), words.end(), "+" );
   vector< string >::iterator last =find( words. begin(), words.end(), "1" );
 words.erase(first,last);
    
   
    for(vector<string>::iterator ix=words.begin();ix!=words.end();++ix)
    {
        cout<<endl<<(*ix);
    }
 
    system("pause");
    return 0;
}
0
Jupiter
Каратель
Эксперт С++
6559 / 3980 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
16.07.2013, 13:14 #6
Valentina, ты работаешь с вектором строк. При чем тут строка?
0
Croessmah
Ушел
Эксперт CЭксперт С++
13553 / 7704 / 872
Регистрация: 27.09.2012
Сообщений: 19,006
Записей в блоге: 3
Завершенные тесты: 1
16.07.2013, 13:17 #7
Цитата Сообщение от Valentina Посмотреть сообщение
У меня данная програма выдает туже строку, то есть ничего не удалянтся
так в векторе нет строк "+" и "-". В векторе только одна строка - "/.+(STL).$1/"
0
Valentina
68 / 68 / 3
Регистрация: 13.05.2012
Сообщений: 130
16.07.2013, 13:23  [ТС] #8
Напишите программу, которая удаляет все символы, кроме STL из строки:
"/.+(STL).$1/"
используя сначала erase(pos,count), а затем erase(iter,iter).

как в данной программе применить erase(iter,iter)
0
Croessmah
Ушел
Эксперт CЭксперт С++
13553 / 7704 / 872
Регистрация: 27.09.2012
Сообщений: 19,006
Записей в блоге: 3
Завершенные тесты: 1
16.07.2013, 13:32 #9
Цитата Сообщение от Valentina Посмотреть сообщение
erase(pos,count)
Ищем STL, удаляем с начала строки и до найденной позиции
Цитата Сообщение от Valentina Посмотреть сообщение
erase(iter,iter)
удаляем с итератора, после STL до end
0
Valentina
68 / 68 / 3
Регистрация: 13.05.2012
Сообщений: 130
16.07.2013, 13:38  [ТС] #10
Цитата Сообщение от Croessmah Посмотреть сообщение
удаляем с итератора, после STL до end
напишите, пожалуйста, пример
0
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6503 / 3142 / 307
Регистрация: 04.12.2011
Сообщений: 8,673
Записей в блоге: 5
16.07.2013, 13:46 #11
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 <string>
using namespace std;
void eraseSumbInStr(string& toCrack, string::size_type posit){
 if(toCrack.size()>posit) toCrack.erase(posit,1);
 else
cout<<"someting wrong with the string "<<toCrack<<" \nat function \"void eraseSumbInStr(string& toCrack, string::size_type posit)\" "<<endl;
}
int main()
{
    string f="/.+(STL).$1/";
   cout<<f;
   string::size_type first = f.find_first_of("+");
   string::size_type last = f.find_first_of("l");//не найдёт
   cout<<endl;
   cout<<first<<" "<<last<<endl;
   eraseSumbInStr(f, first);
   eraseSumbInStr(f, last);
   cout<<f<<endl;
    cin.get();
    return 0;
}
1
soican
49 / 23 / 1
Регистрация: 16.11.2011
Сообщений: 329
Записей в блоге: 5
16.07.2013, 14:09 #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
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
typedef vector<char>::iterator chit;
int main()
{
    vector<char> words;
    string f="/.+(STL).$1/";
  for (unsigned i=0; i<f.length(); i++)
  {   words.push_back( f.at(i));   }
 for(chit ix=words.begin();ix!=words.end();++ix)
{
    if ((*ix)!='S' && (*ix)!='T' && (*ix)!='L' || (*ix)=='.')
    {
      words.erase(ix);
      ix=words.begin();
    }
}
    for(chit iy=words.begin();iy!=words.end();++iy)
    {        cout<<(*iy)<<endl;   }
 return 0;
}
но почему то не удаляется первая "."
0
Croessmah
Ушел
Эксперт CЭксперт С++
13553 / 7704 / 872
Регистрация: 27.09.2012
Сообщений: 19,006
Записей в блоге: 3
Завершенные тесты: 1
16.07.2013, 14:22 #13
Писал прямо тут, так что...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include<string>
#include<iostream>
 
int main(){
    std::string str="/.+(STL).$1/";
    std::string findStr = "STL";
    size_t pos = str.find(findStr);
    if(pos != std::string::npos){
        str.erase(0,pos);
        str.erase(str.begin()+findStr.size(),str.end());
    }else{
        str.clear();
    }
    std::cout<<str<<std::endl;
}
1
Schizorb
510 / 462 / 16
Регистрация: 07.04.2012
Сообщений: 867
Записей в блоге: 1
Завершенные тесты: 1
16.07.2013, 14:31 #14
Цитата Сообщение от soican Посмотреть сообщение
но почему то не удаляется первая "."
а зачем на точку вообще отдельная проверка? Вообще метод erase возвращает итератор, так что не надо ix устанавливать на начало каждый раз. Как-то так, например:

C++
1
2
3
4
5
6
7
for(chit ix=words.begin(); ix!=words.end(); )
{
    if ((*ix)!='S' && (*ix)!='T' && (*ix)!='L')
        ix = words.erase(ix);
    else
        ++ix;
}

Не по теме:

Но ваш код написан не по заданию, т.к. нужен метод erase(iter,iter)

1
soican
49 / 23 / 1
Регистрация: 16.11.2011
Сообщений: 329
Записей в блоге: 5
16.07.2013, 14:56 #15
я нашёл вот такой erase
C++
1
2
iterator erase (const_iterator position);
iterator erase (const_iterator first, const_iterator last);
erase(pos,count) - где такой?
0
16.07.2013, 14:56
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.07.2013, 14:56
Привет! Вот еще темы с ответами:

Удаление элементов вектора со сдвигом - C++
#include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;vector&gt; #include &lt;string&gt; using namespace std; void spc(int x); class...

Удаление из вектора повторяющихся элементов - C++
есть вектор vector&lt;int&gt; array; я считаю в него из файла, подскажите как мне удалить одинаковые цифры, то есть если есть 10 и 10 должно...

Массив и Удаление элементов вектора - C++
1)Найти произведение элементов, расположенных между первым и вторым нулевым элементами. 2)Удалить из массива элемент, расположенный после...

Удаление одинаковых элементов из вектора <string> - C++
# include &lt;iostream&gt; # include &lt;vector&gt; # include &lt;iterator&gt; # include &lt;string&gt; # include &lt;fstream&gt; # include &lt;cstdio&gt; #...


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

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

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