Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <deque>
- typedef std::deque<int> dek;
- typedef std::vector<int> vektor;
- using std::cin;
- using std::cout;
- template <typename Tip1, typename Tip3>
- bool NalazilSe(Tip1 it_pom, Tip3 it_prvi, Tip3 it_zadnji){
- while(it_prvi!=it_zadnji){
- if(*it_pom==*it_prvi){
- return false;
- }
- it_prvi++;
- }
- return true;
- }
- template <typename Tip1, typename Tip2, typename Tip3>
- auto SimetricnaRazlikaBlokova(Tip1 it_n1, Tip1 it_n2, Tip2 it_d1, Tip2 it_d2, Tip3 it_novi)->decltype(it_novi){
- Tip2 pom=it_d1;
- Tip1 temp=it_n1;
- Tip3 it_prvi;
- int brojac=0,dodanih=0;
- while(temp!=it_n2){
- while(pom!=it_d2){
- if(*temp==*pom){
- brojac++;
- break;
- }
- pom++;
- }
- it_prvi=it_novi-dodanih;
- if(brojac==0 && NalazilSe(temp,it_prvi,it_novi)==1){
- *it_novi=*temp;
- dodanih++;
- it_novi++;
- }
- temp++;
- pom=it_d1;
- brojac=0;
- }
- temp=it_n1;
- while(it_d1!=it_d2){
- while(it_n1!=it_n2){
- if(*it_d1==*it_n1){
- brojac++;
- break;
- }
- it_n1++; //Vršeno je kopiranje dijela od 66 do 85 iz razloga što je identičan kao prethodni, ali u ovom slučaju uzimamo elemenat po elemenat iz drugog "niza" i provjeravamo da li se nalazi u prvom, iako je izvršeno kopiranje urađene su izmjene radi prilagodbe.
- }
- it_prvi=it_novi-dodanih;
- if(brojac==0 && NalazilSe(it_d1,it_prvi,it_novi)==1){
- *it_novi=*it_d1;
- dodanih++;
- it_novi++;
- }
- it_d1++;
- it_n1=temp;
- brojac=0;
- }
- return it_novi;
- }
- int main ()
- {
- int br_elem1,br_elem2;
- int nizA[100];
- dek nizB;
- cout << "Unesite broj elemenata niza" << std::endl;
- cin >> br_elem1;
- cout << "Unesite elemente niza" << std::endl;
- for(int i=0; i<br_elem1; i++){
- int element;
- cin >> element;
- nizA[i]=element;
- }
- cout << "Unesite broj elemenata deka" << std::endl;
- cin >> br_elem2;
- cout << "Unesite elemente deka" << std::endl;
- for(int i=0; i<br_elem2; i++){
- int element;
- cin >> element;
- nizB.push_back(element);
- }
- int odredisni[100];
- vektor vekt(0);
- int* kraj = SimetricnaRazlikaBlokova(nizA, nizA+br_elem1, nizB.begin(), nizB.end(), odredisni);
- int* poc = odredisni;
- while (poc < kraj){
- vekt.push_back(*poc);
- poc++;
- }
- if(vekt.size()==0){
- cout << "Blokovi nemaju simetricnu razliku";
- return 0;
- }
- cout << "Simetricna razlika blokova je: ";
- for(int k:vekt){
- cout << k << " ";
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement