Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
Bulat123
0 / 0 / 1
Регистрация: 19.04.2013
Сообщений: 53
1

Проверить, входит ли один вектор в состав другого

04.08.2013, 14:08. Просмотров 587. Ответов 4
Метки нет (Все метки)

Задача состоит в том, что надо проверить входит ли один вектор в состав другого, нужно вывести 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;
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.08.2013, 14:08
Ответы с готовыми решениями:

Проверить, является ли один массив подмножеством другого
Здравствуйте! Опять нужна помощь. Задание: Написать функцию, принимающую в качестве аргумента,...

Сколько функций входит в состав модуля Math?
Кто знает сколько функций входит в состав модуля Math

Проверить можно ли выразить линейно один из векторов массива через заданный вектор
Дан массив векторов, и вектор b можно ли выразить вектор(один из массива) линейно через b ...

Строки: Определить, сколько в тексте слов, в состав которых входит слог сок
Доброго времени суток. Вот ниже собственно задания. Прошу оставлять комментарии к строкам, ибо...

Определить и напечатать значение и номер наименьшего элемента второго массива, который не входит в состав первого
С клавиатуры ввести два массива целых чисел. Определить и напечатать значение и номер наименьшего...

4
Fyret
232 / 210 / 55
Регистрация: 30.07.2013
Сообщений: 442
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;
}
1
Bulat123
0 / 0 / 1
Регистрация: 19.04.2013
Сообщений: 53
04.08.2013, 16:11  [ТС] 3
Fyret, спасибо за ответ. Так и задумано, чтобы iterLargeBegin увеличивался, а iterSmallBegin увеличивается, если выполняется конкретное условие. Про sort я узнал позднее в книге, но здесь нужно самому сделать.

Добавлено через 40 минут
там сортировки не должно быть, забыл написать.
0
Olivеr
413 / 409 / 95
Регистрация: 06.10.2011
Сообщений: 832
04.08.2013, 16:15 4
http://www.cplusplus.com/reference/algorithm/search/?kw=search
1
Bulat123
0 / 0 / 1
Регистрация: 19.04.2013
Сообщений: 53
04.08.2013, 18:00  [ТС] 5
Olivеr, великолепно, большое спасибо!
0
04.08.2013, 18:00
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.08.2013, 18:00

Как определить, входит ли один список в состав другого?
4) Даны два списка, причем второй короче первого. Определите, входит ли второй список в состав...

Входит ли одно число в состав другого.
Доброго времени суток. Помогите пожалуйсто с заданием. Задание: В TextBox1 записывается большое...

Сформулировать один вектор из другого
Сформулировать вектор С из элементов вектора А, Удовлетворяющих условию Aij&gt;2 Дорогие друзья...


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

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

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