Как проверить, является ли элемент одного массива элементом другого в c ++? - PullRequest
0 голосов
/ 10 ноября 2019

Мне нужно написать код на C ++, чтобы решить домашнее задание. Одна часть этого кода должна быть для цикла, который будет проверять, является ли элемент одного массива также частью другого

Я пытался добиться этого с помощью вложенных циклов for, условий if-else if-else и т. Д. Я такженаписать этот код на Python 3, но он мне нужен на c ++.

это код на Python, который может решить эту проблему:

for x in array:
    if m in array2:
        print m
        break

Как этот код будет переведен на c ++? А также, что является (если она существует) c ++ версией ключевого слова Python , равной ? Заранее спасибо.

1 Ответ

0 голосов
/ 10 ноября 2019

Решение настолько простое, что я не буду объяснять детали.

Я показываю 3 разных реализации. Обратите внимание, что последний является одним вкладышем.

Пожалуйста, смотрите:

#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>

std::vector<int> v1{ 1,2,3,4,5,6,7,8,9,10 };
std::vector<int> v2{ 2,4,6,8,10 };

int main() {

    // Solution 1
    std::cout << "\nSolution 1. Values that are in v1 and v2\n";
    // Simple solution
    for (const int i : v1)
        for (const int j : v2)
            if (i == j) std::cout << i << "\n";


    // Solution 2: The C++ solution
    std::cout << "\n\nSolution 2. Values that are in v1 and v2\n";

    // If you want to store the result
    std::vector<int> result{};
    // After this, result contains values that are both in v1 and v2
    set_intersection(v1.begin(), v1.end(), v2.begin(), v2.end(), std::back_inserter(result));

    // Debug output
    std::copy(result.begin(), result.end(), std::ostream_iterator<int>(std::cout, "\n"));


    // Solution 3: The C++ all in one solution
    std::cout << "\n\nSolution 3. Values that are in v1 and v2\n";

    // One-liner
    set_intersection(v1.begin(), v1.end(), v2.begin(), v2.end(), std::ostream_iterator<int>(std::cout, "\n"));

    return 0;
}

...