Coming Soon
Friday, 28 December 2018
Friday, 15 June 2018
Comma Operator inside for loop Condition in C++
You may have used Comma operator in initilialization and increment part of for loop like below
for(init;condition;increment) --> for(int i=0,j=5;i<j;i++,j--)
But can we used Comma operator inside for loop condition ?
The answer is Yes but it behave bit differently.
Predict the output of below program
Output:
As Comma operator is a binary operator it evaluates first operand but discards its result and then evaluates the second operand and returns its result.
In above example , for loop will run till second condition is true (j<6 ) and discards the first condition.
But what if we use comma operator in assignment like below
int a=5,b=7,c;
c=a,b;
Here c will be equal to a (5) as assignment has higher precedence than comma operator.
Please comment if you find anything incorrect.
for(init;condition;increment) --> for(int i=0,j=5;i<j;i++,j--)
But can we used Comma operator inside for loop condition ?
The answer is Yes but it behave bit differently.
Predict the output of below program
void commaOperator() { int i=0,j=0; cout<<"Using && inside for loop Condition"<<endl; for(;i<4&&j<6;) { cout<<i<<" "<<j<<endl; i++; j++; } cout<<"Using comma inside for loop Condition "<<endl; i=0,j=0; for(;i<4,j<6;) { cout<<i<<" "<<j<<endl; i++; j++; } }
Output:
Using && inside for loop Condition 0 0 1 1 2 2 3 3 Using comma inside for loop Condition 0 0 1 1 2 2 3 3 4 4 5 5
As Comma operator is a binary operator it evaluates first operand but discards its result and then evaluates the second operand and returns its result.
In above example , for loop will run till second condition is true (j<6 ) and discards the first condition.
But what if we use comma operator in assignment like below
int a=5,b=7,c;
c=a,b;
Here c will be equal to a (5) as assignment has higher precedence than comma operator.
Please comment if you find anything incorrect.
Saturday, 26 May 2018
Find Consecutive Elements in Unsorted Array in O(n) - C++ Code
#include<iostream> #include<set> int findConsecutiveElements(int arr[], int n) { std::set<int> s; int ans = 0; for (int i = 0; i < n; i++) s.insert(arr[i]); for (int i=0; i<n; i++) { if (s.find(arr[i]-1) == s.end()) { int j = arr[i]; while (s.find(j) != s.end()) j++; ans = std::max(ans, j - arr[i]); } } return ans; } int main() { int arr[] = {1,21, 24, 25, 9, 3, 11, 4, 20, 22,23}; int n = sizeof arr/ sizeof arr[0]; std::cout << "Length of the Longest consecutive elements is " << findConsecutiveElements(arr, n); return 0; }
Labels:
C++,
Consecutive Elements in Unsorted Array,
O(n)
Thursday, 30 November 2017
Kth smallest element in a BST - C++ Code
Do inorder Traversal of BST and count number of elements traversed till now . As inorder traversal gives us the element in sorted Order, when count reaches k , we break out and Print the element.
/** * Definition for Binary Search Tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * }; */ int kthsmallest(TreeNode* root, int k) { if(root==NULL) return 0; stack<TreeNode*> s; bool complete=false; TreeNode* cur=root; int count=0; int val=0; while(!complete) { if(cur!=NULL) { s.push(cur); cur=cur->left; } else { if(!s.empty()) { count++; cur=s.top(); s.pop(); if(count==k) { val=cur->val; break; } cur=cur->right; } else complete=true; } } return val; }
Please comment if you find anything incorrect.
Monday, 6 November 2017
First Non Repeating Character in String
#include<iostream> #include<string> #include<memory> #include<climits> #define NUMBER_OF_CHARS 256 using namespace std; struct CountIndex { int count; int index; }; char getFirstNonRepeatngCharacter(const string& str) { char ch=' '; unique_ptr<CountIndex[]> ci(new CountIndex[256]()); //Can also use shared_ptr //shared_ptr<CountIndex> ci(new CountIndex[256](),std::default_delete<CountIndex[]>()); for(auto& it:str) { ci.get()[it].count++; if(ci.get()[it].count==1) ci.get()[it].index= &it - &str[0]; else ci.get()[it].index= ci.get()[it].index; } int maxIndex=INT_MAX; for(int it=0;it<NUMBER_OF_CHARS;it++) { if(ci.get()[it].count==1 && ci.get()[it].index <maxIndex) { maxIndex= ci.get()[it].index; } } return maxIndex!=INT_MAX?str[maxIndex]:' '; } int main() { string str ; cin>>str; char ch=getFirstNonRepeatngCharacter(str); if(ch !=' ') cout<<" First Non repeating Character is "<< ch; else cout<<" No Repeating Character Exist "; }
Wednesday, 20 September 2017
Folder Organizer
import os,errno
import sys,getopt
def main(argv):
inputDir=''
try:
opts,args= getopt.getopt(argv,"hi:",["iDir="])
except getopt.GetoptError:
print 'DirectoryOrganizer.py -i <inputDirectory>'
sys.exit(2)
for opt,arg in opts:
if opt == '-h':
print 'DirectoryOrganizer.py -i <inputDirectory>'
sys.exit()
elif opt in ("-i","--iDir"):
inputDir=arg
files= os.listdir(inputDir)
for file in files:
extension= os.path.splitext(file)[1][1:]
if extension:
fileInputDir =inputDir+extension
try:
if not os.path.isdir(fileInputDir):
os.makedirs(fileInputDir)
if not os.path.isfile(fileInputDir+"\\"+file):
os.rename(inputDir+file,fileInputDir+"\\"+file)
else:
print "file with same name already exist in folder "+ fileInputDir+"\\"+file
except OSError as e:
if e.errno != errno.EEXIST:
raise
if __name__ == "__main__":
main(sys.argv[1:])
Wednesday, 13 September 2017
Allocating Void pointer memory using new operator
I was Implementing Generic List in C++ and was able to successfully allocate memory of void* data using malloc ( malloc return void *) . But how about using new. Can we do below
The Answer is NO.
Because void has no size . How much space has to be allocated is not known.
So if you need to allocate memory using new use operator like
void Test()
{
void *f= new void[25]; //void *f=malloc(25); --> Works
delete f;
}
The Answer is NO.
Because void has no size . How much space has to be allocated is not known.
So if you need to allocate memory using new use operator like
void Test()
{
void *f=operator new(25);
delete f;
}
Subscribe to:
Posts (Atom)