Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
70 / 70 / 13
Регистрация: 13.05.2012
Сообщений: 130
1

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

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

Author24 — интернет-сервис помощи студентам
Что я делаю не так
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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.07.2013, 12:49
Ответы с готовыми решениями:

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

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

Удаление элементов вектора
Доброе. Данная программа выводит таблицу, и работает с ней. Как удалить строку в таблице? Не...

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

20
Каратель
Эксперт С++
6609 / 4028 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
16.07.2013, 12:50 2
Valentina, а что не так?
0
Неэпический
17870 / 10635 / 2054
Регистрация: 27.09.2012
Сообщений: 26,736
Записей в блоге: 1
16.07.2013, 12:55 3
Цитата Сообщение от Jupiter Посмотреть сообщение
Valentina, а что не так?
Думаю, необходимо в строке найти символы + и 1 и удалить все то между ними но это так...пробую телепатию )))
0
106 / 87 / 13
Регистрация: 29.08.2012
Сообщений: 539
16.07.2013, 12:58 4
Croessmah думаю вы правы ага
автор, если это так, то выкиньте вектор и поищите прям в вашей строке f. то же самое сделайте.
0
70 / 70 / 13
Регистрация: 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
Каратель
Эксперт С++
6609 / 4028 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
16.07.2013, 13:14 6
Valentina, ты работаешь с вектором строк. При чем тут строка?
0
Неэпический
17870 / 10635 / 2054
Регистрация: 27.09.2012
Сообщений: 26,736
Записей в блоге: 1
16.07.2013, 13:17 7
Цитата Сообщение от Valentina Посмотреть сообщение
У меня данная програма выдает туже строку, то есть ничего не удалянтся
так в векторе нет строк "+" и "-". В векторе только одна строка - "/.+(STL).$1/"
0
70 / 70 / 13
Регистрация: 13.05.2012
Сообщений: 130
16.07.2013, 13:23  [ТС] 8
Напишите программу, которая удаляет все символы, кроме STL из строки:
"/.+(STL).$1/"
используя сначала erase(pos,count), а затем erase(iter,iter).

как в данной программе применить erase(iter,iter)
0
Неэпический
17870 / 10635 / 2054
Регистрация: 27.09.2012
Сообщений: 26,736
Записей в блоге: 1
16.07.2013, 13:32 9
Цитата Сообщение от Valentina Посмотреть сообщение
erase(pos,count)
Ищем STL, удаляем с начала строки и до найденной позиции
Цитата Сообщение от Valentina Посмотреть сообщение
erase(iter,iter)
удаляем с итератора, после STL до end
0
70 / 70 / 13
Регистрация: 13.05.2012
Сообщений: 130
16.07.2013, 13:38  [ТС] 10
Цитата Сообщение от Croessmah Посмотреть сообщение
удаляем с итератора, после STL до end
напишите, пожалуйста, пример
0
Комп_Оратор)
Эксперт по математике/физике
8949 / 4703 / 629
Регистрация: 04.12.2011
Сообщений: 13,999
Записей в блоге: 16
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
49 / 23 / 3
Регистрация: 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
Неэпический
17870 / 10635 / 2054
Регистрация: 27.09.2012
Сообщений: 26,736
Записей в блоге: 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
512 / 464 / 81
Регистрация: 07.04.2012
Сообщений: 869
Записей в блоге: 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
49 / 23 / 3
Регистрация: 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
Неэпический
17870 / 10635 / 2054
Регистрация: 27.09.2012
Сообщений: 26,736
Записей в блоге: 1
16.07.2013, 15:04 16
Цитата Сообщение от soican Посмотреть сообщение
erase(pos,count) - где такой?
Удаление элементов из вектора
2
Каратель
Эксперт С++
6609 / 4028 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
16.07.2013, 16:59 17
Цитата Сообщение от soican Посмотреть сообщение
C++
1
2
3
4
vector<char> words;
 string f="/.+(STL).$1/";
 for (unsigned i=0; i<f.length(); i++)
 { words.push_back( f.at(i)); * }
C++
1
2
string f("/.+(STL).$1/");
vector<char> words(f.begin(), f.end());
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
16.07.2013, 17:15 18
А зачем вообще переводить std::string в std::vector<char> в данном случае?
0
Каратель
Эксперт С++
6609 / 4028 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
16.07.2013, 17:18 19
Tulosba, незачем
0
49 / 23 / 3
Регистрация: 16.11.2011
Сообщений: 329
Записей в блоге: 5
16.07.2013, 17:31 20
Цитата Сообщение от Tulosba Посмотреть сообщение
А зачем вообще переводить std::string в std::vector<char> в данном случае?
я не знал до этого .erase для string, только для vector
0
16.07.2013, 17:31
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.07.2013, 17:31
Помогаю со студенческими работами здесь

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

Удаление элементов вектора со сдвигом
#include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;vector&gt; #include &lt;string&gt; using namespace std;...

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru