Sunday, February 19, 2012

SWAPPING-VERY IMPORTANT LOGIC


#include<iostream>
using namespace std;

void approach1(int& a, int& b)
{
  cout<<"\nApproach 1"<<endl;
  a^=b^=a^=b;
}

void approach2(int& a, int& b)
{
  cout<<"\nApproach 2"<<endl;
  //b=(a+b)-(a=b); - This should work but doesnt, why?  a =((a = a + b) - (b = a - b)); 
}

void approach3(int& a, int& b)
{
  cout<<"\nApproach 3"<<endl;
  a = ((a = a * b) / (b = a / b));
}



int main()
{
  int a = 13, b = 29;
  cout<<"\nOriginal"<<endl;
  cout<<"a = "<<a<<", b = "<<b<<endl;

  approach1(a, b);
  cout<<"a = "<<a<<", b = "<<b<<endl;

  a = 13, b = 29;
  approach2(a, b);
  cout<<"a = "<<a<<", b = "<<b<<endl;

  a = 13, b = 29;
  approach3(a, b);
  cout<<"a = "<<a<<", b = "<<b<<endl;

  return 0;
}

sorting,union and intersection of elements....


#include <iostream>
#include <algorithm>
#include <vector>
#include <set>
using namespace std;
 
int main()
{
  int setOne[] = {5, 10, 15, 20, 25};
  int setTwo[] = {50, 40, 30, 20, 10, 11, 21, 31, 41, 51};
 
  int setOneSize = sizeof(setOne) / sizeof(int);
  int setTwoSize = sizeof(setTwo) / sizeof(int);
 
  //Its necessary to sort if not already sorted  sort(setTwo, setTwo + setTwoSize);
 
  vector<int> unionSetVector(setOneSize + setTwoSize); 
  set_union(setOne, setOne + setOneSize, setTwo, setTwo + setTwoSize, unionSetVector.begin());
  
  cout<<"\n1. unionSetVector : ";
  copy(unionSetVector.begin(), unionSetVector.end(), ostream_iterator<int>(cout, " "));
  cout<<endl;
 
  vector<int> intersectionSetVector(min(setOneSize, setTwoSize)); 
  set_intersection(setOne, setOne + setOneSize, setTwo, setTwo + setTwoSize, intersectionSetVector.begin());
 
  cout<<"\n1. intersectionSetVector : ";
  copy(intersectionSetVector.begin(), intersectionSetVector.end(), ostream_iterator<int>(cout, " "));
  cout<<endl;
 
  cout<<endl;
  return 0;
}
 

Simple example of multiset


#include <iostream>
#include <set>
#include <algorithm>
using namespace std;

int main()
{
 int a[ 10 ] = { 7, 22, 9, 1, 18, 30, 100, 22, 85, 13 };
 int aSize = sizeof(a) / sizeof(int);
 std::multiset< int, std::less< int > > intMultiset(a, a + aSize);

 cout << "Printing out all the values in the multiset : ";
 multiset<int>::iterator it;
 for ( it = intMultiset.begin(); it != intMultiset.end(); ++it)
   cout << "  " << *it;
 cout << endl << endl;

 std::ostream_iterator< int > output( cout, " " );

 cout << "There are currently " << intMultiset.count( 15 )
      << " values of 15 in the multiset\n\n";

 intMultiset.insert( 15 );
 intMultiset.insert( 15 );

 cout << "After two inserts, there are currently " << intMultiset.count( 15 )
      << " values of 15 in the multiset\n\n";

 cout << "Printing out all the values in the multiset : ";
 for ( it = intMultiset.begin(); it != intMultiset.end(); ++it)
   cout << "  " << *it;
 cout << endl << endl;

 return 0;
}