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

Работа с vector-ом - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.91
REALIST07
Автор FAQ
Автор FAQ
 Аватар для REALIST07
174 / 174 / 13
Регистрация: 11.06.2010
Сообщений: 932
22.04.2011, 20:56     Работа с vector-ом #1
Как организовать поиск заданного элемента в векторе???
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.04.2011, 20:56     Работа с vector-ом
Посмотрите здесь:

C++ работа с шаблоном класса Vector
Работа с STL. Поменять vector на list C++
VisualStudio C++ vector<vector<int> > push_back() C++
Работа со столбцами в vector< vector<int> > C++
C++ Работа с STL vector
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
22.04.2011, 21:02     Работа с vector-ом #2
Воспользоваться алгоритмами из STL.
REALIST07
Автор FAQ
Автор FAQ
 Аватар для REALIST07
174 / 174 / 13
Регистрация: 11.06.2010
Сообщений: 932
22.04.2011, 21:11  [ТС]     Работа с vector-ом #3
Просто можно алгоритм ?Или указать аргументы функции для поиска именно в vectore
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
22.04.2011, 21:16     Работа с vector-ом #4
REALIST07, Что не понятно ? Перейдите по ссылке, там есть пример - http://www.cppreference.com/wiki/ru/algorithm/find
REALIST07
Автор FAQ
Автор FAQ
 Аватар для REALIST07
174 / 174 / 13
Регистрация: 11.06.2010
Сообщений: 932
22.04.2011, 21:19  [ТС]     Работа с vector-ом #5
Еще вопрос-какую книгу посоветуете для начинающего по STL?
igorrr37
 Аватар для igorrr37
1593 / 1221 / 118
Регистрация: 21.12.2010
Сообщений: 1,868
Записей в блоге: 7
22.04.2011, 21:24     Работа с vector-ом #6
c++ и stl справочное руководство
REALIST07
Автор FAQ
Автор FAQ
 Аватар для REALIST07
174 / 174 / 13
Регистрация: 11.06.2010
Сообщений: 932
22.04.2011, 21:27  [ТС]     Работа с vector-ом #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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
/* выполнить следующее:
1. Создать объект-контейнер в соответствии с вариантом задания и заполнить его данными, тип которых определяется 
вариантом задания.
2.    Просмотреть контейнер.
3.    Изменить контейнер, удалив из него одни элементы и заменив другие.
4.    Просмотреть контейнер, используя для доступа к его элементам итераторы.
5.    Создать второй контейнер этого же класса и заполнить его данными того же типа, что и первый контейнер.
6.    Изменить первый контейнер, удалив из него n элементов после заданного и добавив затем в него все элементы из 
второго контейнера.
7.    Просмотреть первый и второй контейнеры.
 
Тип контейнера: vector
Встроенный тип данных: double
*/
 
#include "stdafx.h"
#include <vector>
#include <iostream>
#include <algorithm>
#include <time.h>
using namespace std;
void main()
{    srand(unsigned(time(NULL)));
    setlocale(LC_ALL, "Russian");
    /*
    1. Создать объект-контейнер в соответствии с вариантом задания и заполнить его данными, тип которых определяется 
    вариантом задания.
    */
    vector <double>::iterator cont1_Iter;
 
    // Create an empty multiset ms0 of key type integer
    vector <double> cont1;
    const int MAX = 10;
    for(int i=0; i<MAX; i++)
        cont1.push_back((rand()%50)/10.0);
    cout<<endl;
    
    //2.    Просмотреть контейнер.
    cout << "Контейнер 1 =";
    for ( cont1_Iter = cont1.begin( ); cont1_Iter != cont1.end( ); cont1_Iter++ )
        cout << " " << *cont1_Iter;
    cout<<endl;
 
   //3.    Изменить контейнер, удалив из него одни элементы и заменив другие.
    cont1_Iter = ++cont1.begin();
    cont1.erase(cont1_Iter);
    cont1.push_back(10.001);
    cout<<endl;
 
    //4.    Просмотреть контейнер, используя для доступа к его элементам итераторы.
    cout<<"Контейнер№1 после удаления и вставки элемента: \n";
    cout << "Cont1 =";
    for ( cont1_Iter= cont1.begin( ); cont1_Iter != cont1.end( ); cont1_Iter++ )
        cout << " " << *cont1_Iter;
    cout<<endl;
    
    //5.    Создать второй контейнер этого же класса и заполнить его данными того же типа, что и первый контейнер.
    vector <double>::iterator cont2_Iter;
    vector <double> cont2( cont1 );
    //    Просмотреть контейнер, используя для доступа к его элементам итераторы.
    cout << "Контейнер №2 =";
    for ( cont2_Iter = cont2.begin( ); cont2_Iter != cont2.end( ); cont2_Iter++ )
        cout << " " << *cont2_Iter;
    cout<<endl;
 
    /*6.    Изменить первый контейнер, удалив из него n элементов после заданного и добавив затем в него все элементы из 
        второго контейнера.
    */
    cout<<"Введите кол-во эл-ов, которые нужно удалить из 1-го контейнера: ";
    int n;
    cin>>n;
    cout<<"Введите значение элемента, после которого нужно удалить "<<n<<" элементов: ";
    double k;
    cin>>k;
    vector <double>::iterator tmp;
    
    cont1_Iter = find( cont1.begin(), cont2.end(), k);
    if (cont1_Iter == cont1.end())
        cout<<"В векторе нет такого элемента!";
    else {
        for(int i=0; (i<n) && (cont1_Iter!= cont1.end( )); i++){
            tmp=cont1_Iter;
            cont1_Iter++;
            cont1.erase(tmp);
        }
    }
    
    cout<<endl;
 
    //7.    Просмотреть первый и второй контейнеры.
    //    Просмотреть контейнер, используя для доступа к его элементам итераторы.
    cout << "Контейнер №1 =";
    for ( cont1_Iter = cont1.begin( ); cont1_Iter != cont1.end( ); cont1_Iter++ )
        cout << " " << *cont1_Iter;
    cout<<endl;
    //    Просмотреть контейнер, используя для доступа к его элементам итераторы.
    cout << "Контейнер №2 =";
    for ( cont2_Iter = cont2.begin( ); cont2_Iter != cont2.end( ); cont2_Iter++ )
        cout << " " << *cont2_Iter;
    cout<<endl;
    cont1.clear();
    cont2.clear();
    
    system("pause");
    return ;
}
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
22.04.2011, 21:29     Работа с vector-ом #8
Цитата Сообщение от REALIST07 Посмотреть сообщение
Еще вопрос-какую книгу посоветуете для начинающего по STL?
Мюссер Д., Дердж Ж., Сейни А. - C++ и STL. Справочное руководство. 2-е издание - 2010
panicwassano
590 / 558 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
22.04.2011, 21:29     Работа с vector-ом #9
мануал
REALIST07
Автор FAQ
Автор FAQ
 Аватар для REALIST07
174 / 174 / 13
Регистрация: 11.06.2010
Сообщений: 932
22.04.2011, 21:33  [ТС]     Работа с vector-ом #10
Проблема именно в том месте где указывается после какого элемента удалить
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
22.04.2011, 21:40     Работа с vector-ом #11
REALIST07, Какая проблема ? И покажите этот участок кода.
REALIST07
Автор FAQ
Автор FAQ
 Аватар для REALIST07
174 / 174 / 13
Регистрация: 11.06.2010
Сообщений: 932
22.04.2011, 21:52  [ТС]     Работа с vector-ом #12
Начиная с 78 строчки я посмотрел код по которому ссылка выше-все равно проблемы,программа останавливается с ошибкой
xAtom
 Аватар для xAtom
910 / 735 / 60
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
22.04.2011, 22:56     Работа с vector-ом #13
Попробуй этот вариант, тут начиркал пока время есть.
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
47
48
49
50
51
52
53
54
55
  vector<int>  v;
 
  for(int i = 0; i < 1000; i++)
    v.push_back(  i * rand() % 20 + 1 );
 
 // 1 - первый метод поиска при помощи итератора с удалением указанных значений
 // вставим в середину вектора значение для поиска
v.insert(v.begin() + (v.size() >> 1) , -7777 );  
v.insert(v.begin() + 3, -7777);  // ещё вставим в 4-ую позицию
v.back() = -7777;  // изменим значение последнего элемента
 
int fnum = -7777;  // значение для поиска
 
int inx    = 0;
prev:
   for(vector<int>::iterator  iter = v.begin() + inx; iter != v.end(); ++iter, inx++) {
    if( *iter == fnum ) {
           cout << "1. method: yes find value\n";
           v.erase( iter );  
           if(inx + 1 >= v.size())
         break;
           inx--;
          goto prev;
    }
   }
   cout << '\n';
 
 
// 2 - второй метод поиск как в обычном массиве 
v.insert(v.begin() + (v.size() >> 1) , -7777 );  
v.insert(v.begin() + 3, -7777);  // ещё вставим в 4-ую позицию
v.back() = -7777;  // изменим значение последнего элемента
 
for(int  e = 0; e < v.size(); e++) {
     if(v[e] == fnum) {
    cout << "2. method: yes find value\n";
    v.erase( &v[e] );
     }
}
cout << '\n';
 
// 3 - третий метод поисka функции find 
v.insert(v.begin() + (v.size() >> 1) , -7777 );  
v.insert(v.begin() + 3, -7777);  // ещё вставим в 4-ую позицию
v.back() = -7777;  // изменим значение последнего элемента
 
while(1) {
   vector<int>::iterator cmp = find(v.begin(), v.end(), fnum);
   if(cmp == v.end())
    break;
   v.erase(cmp);
   cout << "3. method: yes find value\n";
}
 
v.clear();
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.04.2011, 23:00     Работа с vector-ом
Еще ссылки по теме:

Работа с классом vector C++
Работа со строками / error: vector subscript out of range C++
C++ Работа с Vector<int[2]>

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

Или воспользуйтесь поиском по форуму:
neske
1419 / 786 / 55
Регистрация: 26.03.2010
Сообщений: 2,689
22.04.2011, 23:00     Работа с vector-ом #14
xAtom, использования оператора goto - плохой стиль.
Yandex
Объявления
22.04.2011, 23:00     Работа с vector-ом
Ответ Создать тему
Опции темы

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