-
Star
(119)
You must be signed in to star a gist -
Fork
(60)
You must be signed in to fork a gist
-
-
Save satwikkansal/c959e89161cc60db16b412233177feab to your computer and use it in GitHub Desktop.
| /* | |
| This a header file that includes every standard library. | |
| You can use it to save time. | |
| NOTE: This header file may not be recognized by compilers | |
| other than gcc. | |
| */ | |
| #include <bits/stdc++.h> | |
| /* | |
| //Use this if the above header file doesn't work. | |
| #include <iostream> | |
| #include <algorithm> | |
| #include <list> | |
| #include <map> | |
| #include <priority_queue> | |
| #include <stack> | |
| #include <string> | |
| #include <vector> | |
| */ | |
| using namespace std; | |
| // These will be used later | |
| struct Person { | |
| string name; | |
| int age; | |
| } p1, p2, p3; | |
| struct is_older { | |
| bool operator()(struct Person p1, struct Person p2) { | |
| return p1.age > p2.age; | |
| } | |
| }; | |
| bool compare_names(struct Person p1, struct Person p2) { | |
| return p1.name < p2.name; | |
| } | |
| bool way_to_sort(int i, int j) { return i > j; } | |
| int main() { | |
| /* | |
| ======== | |
| STACK | |
| ======== | |
| */ | |
| stack <string> distros; //Create a stack of strings. | |
| distros.push("Ubuntu"); //Pushing elements into the stack. | |
| distros.push("Mint"); | |
| cout << "Number of distros in the stack are " << distros.size() << endl; | |
| cout << "Distro on the top is " << distros.top() << endl; | |
| distros.pop(); | |
| cout << "The top of the stack is now " << distros.top() << endl; | |
| /* | |
| ======== | |
| VECTOR | |
| ======== | |
| */ | |
| vector <int> numbers; | |
| if (numbers.empty()){ //check if the vector is empty? | |
| cout << "The vector is empty :(" << endl; | |
| } | |
| for(int i=0; i<100; i+=10){ //Add some values to the vector | |
| numbers.push_back(i); | |
| } | |
| cout << "Size of the vector is " << numbers.size() << endl; | |
| // iterating over the vector, declaring the iterator | |
| vector <int>::iterator it; | |
| cout << "The vector contains: "; | |
| for (it=numbers.begin(); it!=numbers.end(); it++) { | |
| cout << " " << *it; | |
| } | |
| // getting value at particular position | |
| int position = 5; | |
| cout<<"\nVector at position "<<position<<" contains "<<numbers.at(position)<<endl; | |
| // deleting an element at position | |
| numbers.erase(numbers.begin() + position); | |
| cout<<"Vector at position "<<position<<" contains "<<numbers.at(position)<<endl; | |
| // deleting a range of elements, first two elements | |
| // NOTE: You may expect elements at 0, 1 and 2 to be deleted | |
| // but index 2 is not inclusive. | |
| numbers.erase(numbers.begin(), numbers.begin()+2); | |
| cout << "The vector contains: "; | |
| for (it=numbers.begin(); it!=numbers.end(); it++) { | |
| cout << " " << *it; | |
| } | |
| // Clearing the vector | |
| numbers.clear(); | |
| if (numbers.empty()){ | |
| cout << "\nThe vector is now empty again :("; | |
| } | |
| /* | |
| ========= | |
| HASHMAP | |
| ========= | |
| */ | |
| // Declaration <key type, value type> | |
| map <string, string> companies; | |
| companies["Google"] = "Larry Page"; | |
| companies["Facebook"] = "Mark Zuckerberg"; | |
| // insertion can also be done as | |
| companies.insert(pair<string, string> ("Xarvis Tech", "xarvis")); | |
| // or | |
| companies.insert(map<string,string>::value_type("Quora", "Adam D'Angelo")); | |
| // or even | |
| companies.insert(make_pair(string("Uber"), string("Travis Kalanick"))); | |
| // Iterating the map | |
| map<string, string>::iterator itz; | |
| cout << "\n\nCompanies and founders" << endl; | |
| for (itz=companies.begin(); itz!=companies.end(); itz++){ | |
| cout << "Company: " << (*itz).first << "\t Founder: " << itz->second <<endl; | |
| } | |
| itz = companies.find("Google"); | |
| cout << itz->second; | |
| /* Check if key exists! | |
| if ( m.find("f") == m.end() ) { | |
| // not found | |
| } else { | |
| // found | |
| } | |
| */ | |
| /* | |
| ============== | |
| LINKED LISTS | |
| ============== | |
| */ | |
| list<int> mylist; | |
| list<int>::iterator it1,it2,itx; | |
| // set some values: | |
| for (int i=1; i<10; ++i) mylist.push_back(10*i); | |
| // 10 20 30 40 50 60 70 80 90 | |
| it1 = it2 = mylist.begin(); // ^^ | |
| advance (it2,6); // ^ ^ | |
| ++it1; // ^ ^ | |
| it1 = mylist.erase (it1); // 10 30 40 50 60 70 80 90 | |
| // ^ ^ | |
| it2 = mylist.erase (it2); // 10 30 40 50 60 80 90 | |
| // ^ ^ | |
| ++it1; // ^ ^ | |
| --it2; // ^ ^ | |
| mylist.erase (it1,it2); // 10 30 60 80 90 | |
| cout << "\nmylist contains:"; | |
| for (itx=mylist.begin(); itx!=mylist.end(); ++itx) | |
| cout << ' ' << *itx; | |
| cout << '\n'; | |
| // NOTE: it1 still points to 40, and 60 is not deleted | |
| cout << endl << *it1 << "\t" << *it2 <<endl; | |
| // This will print an unexpected value | |
| it1++; | |
| cout << *it1; | |
| cout << "\nmylist now contains:"; | |
| for (it1=mylist.begin(); it1!=mylist.end(); ++it1) | |
| cout << ' ' << *it1; | |
| cout << '\n'; | |
| /* | |
| ======= | |
| HEAPS | |
| ======= | |
| */ | |
| // Creates a max heap | |
| priority_queue <int> pq; | |
| // To create a min heap instead, just uncomment the below line | |
| // priority_queue <int, vector<int>, greater<int> > pq; | |
| pq.push(5); | |
| pq.push(1); | |
| pq.push(10); | |
| pq.push(30); | |
| pq.push(20); | |
| // Extracting items from the heap | |
| while (!pq.empty()) | |
| { | |
| cout << pq.top() << " "; | |
| pq.pop(); | |
| } | |
| // creating heap from user defined objects | |
| // Let's initialize the properties of `Person` object first | |
| p1.name = "Linus Torvalds"; | |
| p1.age = 47; | |
| p2.name = "Elon Musk"; | |
| p2.age = 46; | |
| p3.name = "Me!"; | |
| p3.age = 19; | |
| // Initialize a min heap | |
| // Note: We defined a comparator is_older in the beginning to | |
| // compare the ages of two person. | |
| priority_queue <struct Person, vector<struct Person>, is_older> mh; | |
| mh.push(p1); | |
| mh.push(p2); | |
| mh.push(p3); | |
| // Extracting items from the heap | |
| while (!mh.empty()) | |
| { | |
| struct Person p = mh.top(); | |
| cout << p.name << " "; | |
| mh.pop(); | |
| } | |
| /* | |
| ========= | |
| SORTING | |
| ========= | |
| */ | |
| // The following list type initialization is only supported after C++11 | |
| //vector<int> int_vec = {56, 32, -43, 23, 12, 93, 132, -154}; | |
| // If the above style of initialization doesn't work, use the following one | |
| static int arr[] = {56, 32, -43, 23, 12, 93, 132, -154}; | |
| int arr_len = sizeof(arr) / sizeof(arr[0]); | |
| vector <int> int_vec(arr, arr + arr_len); | |
| cout << endl; | |
| // Default: sort ascending | |
| // sort(int_vec.begin(), int_vec.end()); | |
| // To sort in descending order: | |
| // Do not include the () when you call wayToSort | |
| // It must be passed as a function pointer or function object | |
| sort(int_vec.begin(), int_vec.end(), way_to_sort); | |
| for (vector <int>::iterator i = int_vec.begin(); i!=int_vec.end(); i++) | |
| cout << *i << " "; | |
| cout << endl; | |
| // sorting the array | |
| sort(arr, arr + arr_len); | |
| for (int i=0; i < arr_len; i++) { | |
| cout << arr[i] << " "; | |
| } | |
| // Sorting user-defined objects | |
| static struct Person persons[] = {p1, p2, p3}; | |
| sort(persons, persons+3, compare_names); | |
| // This will printout the names in alphabetical order | |
| for (int i=0; i < 3; i++) { | |
| cout << persons[i].name << " "; | |
| } | |
| return 0; | |
| } |
Thanks . This is what we need. Thank you for your blog article, it helped us lot.
thanks
Thanks for providing this
Thanks
Not only this:
// This will print an unexpected value
it1++;
cout << *it1;
But also this, will cause crash:
// NOTE: it1 still points to 40, and 60 is not deleted
cout << endl << *it1 << "\t" << *it2 <<endl;
After using iterators in the list.erase() method, they are invalidated and we shouldn't use them.
Aweskm😀😃 Please provide output as comment in code.
Thank you
You completely forgot about strings. Nut rest of all the things are good.
Not only this: // This will print an unexpected value it1++; cout << *it1; But also this, will cause crash: // NOTE: it1 still points to 40, and 60 is not deleted cout << endl << *it1 << "\t" << *it2 <<endl;
After using iterators in the list.erase() method, they are invalidated and we shouldn't use them.
std::list::erase returns a new valid iterator pointing to the element immediately following the erased element
cool~