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

принадлежит ли один вектор другому (входит ли в состав) - C++

Восстановить пароль Регистрация
 
Bulat123
0 / 0 / 0
Регистрация: 19.04.2013
Сообщений: 53
04.08.2013, 14:08     принадлежит ли один вектор другому (входит ли в состав) #1
Задача состоит в том, что надо проверить входит ли один вектор в состав другого, нужно вывести 1 или 0 (true или false). Проблема такова, что при отрицательном ответе выдает ошибку во время выполнения vector iterator not incrementable или vector iterator not dereferencable(до небольшого изменения в 1 строке, где производился явный инкремент итератора).

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
 vector<int> vec1, vec2;
    int num, nums;
    bool eq = false;
    cout << "When you stop fillng a vector, please, enter some letter." << endl;
    cout << "How much numbers are in the first vector? ";
    cin >> nums;
    cout << "Filling the first vector:" << endl;
    for (int cnt = 0; cnt != nums; ++cnt) {
        cin >> num; 
        vec1.push_back(num);
    }
    cout << "How much numbers are in the second vector? ";
    cin >> nums;
    cout << "Filling the second vector:" << endl; 
    for (int cnt = 0; cnt != nums; ++cnt) {
        cin >> num; 
        vec2.push_back(num);
    }
    vector<int>::iterator iterSmallBegin = (vec1.size() > vec2.size()) ? vec2.begin() : vec1.begin(),
                          iterLargeBegin = (vec1.size() > vec2.size()) ? vec1.begin() : vec2.begin(),
                          iterSmallEnd = (vec1.size() > vec2.size()) ? vec2.end() : vec1.end(),
                          iterLargeEnd = (vec1.size() > vec2.size()) ? vec1.end() : vec2.end();
    for (; iterSmallBegin != iterSmallEnd; ++iterLargeBegin) {
        if (iterLargeBegin != iterLargeEnd) {
        eq = (*iterSmallBegin == *iterLargeBegin) ? true : false;    
        iterSmallBegin = (eq == true) ? ++iterSmallBegin : iterSmallBegin;
        }
    }
    cout << eq << endl;
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.08.2013, 14:08     принадлежит ли один вектор другому (входит ли в состав)
Посмотрите здесь:

сколько функций входит в состав модуля Math C++
C++ выделить место для объекта с помощью new или создать указатель, объект и присвоить один другому. какая разница?
C++ Сформировать список L включив в него по одному разу элементы, которые входят в один из списков L1 и L2, но в то же время не входит во второй из них
Проверить, принадлежит ли первой круг полностью другому кругу или наоборот C++
C++ Строки: Определить, сколько в тексте слов, в состав которых входит слог сок
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Fyret
184 / 170 / 13
Регистрация: 30.07.2013
Сообщений: 359
04.08.2013, 14:27     принадлежит ли один вектор другому (входит ли в состав) #2
Дык,
for (; iterSmallBegin != iterSmallEnd; ++iterLargeBegin)

Но программа все равно неправильная. В STL есть готовые алгоритмы:

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
#include <algorithm>
#include <iostream>
#include <vector>
 
using namespace std;
 
int main()
{
    vector<int> vec1, vec2;
    int num, nums;
 
    cout << "When you stop fillng a vector, please, enter some letter." << endl;
    cout << "How much numbers are in the first vector? ";
    cin >> nums;
    cout << "Filling the first vector:" << endl;
    for (int cnt = 0; cnt != nums; ++cnt) {
        cin >> num; 
        vec1.push_back(num);
    }
 
    cout << "How much numbers are in the second vector? ";
    cin >> nums;
    cout << "Filling the second vector:" << endl; 
    for (int cnt = 0; cnt != nums; ++cnt)
    {
        cin >> num; 
        vec2.push_back(num);
    }
 
    std::sort( vec1.begin(), vec1.end() );
    std::sort( vec2.begin(), vec2.end() );
 
    cout << std::includes( vec1.begin(), vec1.end(), vec2.begin(), vec2.end() ) << endl;
 
    return 0;
}
Bulat123
0 / 0 / 0
Регистрация: 19.04.2013
Сообщений: 53
04.08.2013, 16:11  [ТС]     принадлежит ли один вектор другому (входит ли в состав) #3
Fyret, спасибо за ответ. Так и задумано, чтобы iterLargeBegin увеличивался, а iterSmallBegin увеличивается, если выполняется конкретное условие. Про sort я узнал позднее в книге, но здесь нужно самому сделать.

Добавлено через 40 минут
там сортировки не должно быть, забыл написать.
Olivеr
 Аватар для Olivеr
411 / 407 / 13
Регистрация: 06.10.2011
Сообщений: 830
04.08.2013, 16:15     принадлежит ли один вектор другому (входит ли в состав) #4
http://www.cplusplus.com/reference/a...rch/?kw=search
Bulat123
0 / 0 / 0
Регистрация: 19.04.2013
Сообщений: 53
04.08.2013, 18:00  [ТС]     принадлежит ли один вектор другому (входит ли в состав) #5
Olivеr, великолепно, большое спасибо!
Yandex
Объявления
04.08.2013, 18:00     принадлежит ли один вектор другому (входит ли в состав)
Ответ Создать тему
Опции темы

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