// (╯°□°)╯︵ ┻━┻
2#include<bits/stdc++.h>
3// #include <boost/multiprecision/cpp_int.hpp>
4// using boost::multiprecision::cpp_int;
5using namespace std;
6#define ll long long int
7#define lld long double
8#define vi vector<ll>
9#define pb push_back
10#define MOD (ll)(1e9 + 7)
11#define rep(i,a,b) for(ll i = a; i<b; ++i)
12#define f(a) for(ll i = 0; i<a; ++i)
13#define all(a) (a).begin(),(a).end()
14#define present(c,x) ((c).find(x) != (c).end())
15#define cpresent(c,x) (find(all(c),x) != (c).end())
16#define p(a) cout << a << endl;
17#define p2(a,b) cout << a << " " << b << endl;
18#define fast_io ios_base::sync_with_stdio(false);cin.tie(NULL);
19//:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::://
20// GCD + LCM function
21ll gcd(ll a, ll b) { return b == 0 ? a : gcd(b, a % b); }
22ll lcm(ll a, ll b) { return a * (b / gcd(a, b)); }
23
24int32_t main() {
25 fast_io; cout.tie(NULL);
26 ll tc = 1;
27 cin >> tc;
28 while(tc--) {
29 //
30 }
31}
clude <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"); //Pushes 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 a particular position
int position = 5;
cout<<"\nVector at position "<<position<<" contains "<<numbers.at(position)<<endl;
// deleting an element at a 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;
/*
==============
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 people.
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 in versions 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 print out the names in alphabetical order
for (int i=0; i < 3; i++) {
cout << persons[i].name << " ";
}
return 0;
}
Hope you found this helpful 
I've also created a gist for the above cheatsheet. Feel free to fork, suggest changes, or point out bugs!
No comments:
Post a Comment