Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

หาองค์ประกอบที่อยู่ในอาร์เรย์แรกแต่ไม่อยู่ในอาร์เรย์ที่สองด้วย STL ใน C++

บทนำ

มีอาร์เรย์ 2 อาร์เรย์ ต้องการเปรียบเทียบหาตัวเลขที่อยู่ในอาร์เรย์แรกแต่ไม่อยู่ในอาร์เรย์ที่สอง โดยใช้ STL ใน C++

ตัวอย่าง

Input: array1[] = {1,2,3,4,5,7}  array2[] = {2,3,4,5,6,8}
Output: 1, 7

Input: array1[] = {1,20,33,45,67}  array2[] = {1,12,13,114,15,13}
Output: 20,33,45,67

แนวทางในโปรแกรม -

  • สร้างฟังก์ชัน find() เพื่อหาอิลิเมนต์ที่อยู่ในอาร์เรย์ 1 แต่ไม่อยู่ในอาร์เรย์ 2
  • ประกาศ Vector (ไดนามิกอาร์เรย์ที่ปรับขนาดอัตโนมัติ) เก็บผลลัพธ์ และ Iterator สำหรับวนลูป
  • เรียงอาร์เรย์ทั้งสอง แล้วใช้ set_difference() หาความต่าง และ resize vector ตามผลลัพธ์

ใน STL ใช้ set_difference() หา "array1 - array2" ความต่างของเซต 2 ตัว คืออิลิเมนต์ที่อยู่ในเซตแรกแต่ไม่อยู่ในเซตที่สอง อิลิเมนต์ที่คัดลอกมาจะมาจากช่วงแรกเสมอ และทั้งสองช่วงต้องเรียงลำดับไว้ก่อน

Syntax

OutputIterator set_difference (InputIterator1 first1, InputIterator1 last1,
                               InputIterator2 first2, InputIterator2 last2,
                               OutputIterator result);

อัลกอริทึม

Start
Step 1 → Create function find(array1, array2, x, y)
    Declare vector v(x + y)
    Declare vector<int>::iterator it
    Sort array1, array2
    diff = set_difference(array1, array1+x, array2, array2+y, v.begin())
    v.resize(diff - v.begin())
    Print elements in array1 not in array2
End

Step 2 → In main()
    Declare array1, array2
    Calculate x, y sizes
    Call find(array1, array2, x, y)

ตัวอย่างโค้ด

#include <bits/stdc++.h>
using namespace std;

void find(int array1[], int array2[], int x, int y) {
    vector<int> v(x + y);
    vector<int>::iterator it;
    
    sort(array1, array1 + x);
    sort(array2, array2 + y);
    
    auto diff = set_difference(array1, array1 + x, array2, array2 + y, v.begin());
    v.resize(diff - v.begin());
    
    cout << "The elements present in array1[] and not in array2[]: ";
    for (auto diff = v.begin(); diff != v.end(); ++diff)
        cout << *diff << " ";
    cout << endl;
}

int main() {
    int array1[] = { 1, 2, 3, 4, 5, 7 };
    int array2[] = { 2, 3, 4, 5, 6, 8 };
    int x = sizeof(array1) / sizeof(array1[0]);
    int y = sizeof(array2) / sizeof(array2[0]);
    find(array1, array2, x, y);
    return 0;
}

ผลลัพธ์

The elements present in array1[] and not in array2[]: 1 7

หมายเหตุ

โค้ดต้นฉบับมีข้อผิดพลาด: ตัวแปร diff ไม่ได้ประกาศ type และใช้ sizeof(array2[1]) ควรเป็น sizeof(array2[0]) โค้ดข้างบนแก้ไขแล้ว