Home » Archives for 2011-08-14
vi/vim cheat sheet
11:16 PM Sayef Azad Sakin
Cursor movement
- h - move left
- j - move down
- k - move up
- l - move right
- w - jump by start of words (punctuation considered words)
- W - jump by words (spaces separate words)
- e - jump to end of words (punctuation considered words)
- E - jump to end of words (no punctuation)
- b - jump backward by words (punctuation considered words)
- B - jump backward by words (no punctuation)
- 0 - (zero) start of line
- ^ - first non-blank character of line
- $ - end of line
- G - Go To command (prefix with number - 5G goes to line 5)
Note: Prefix a cursor movement command with a number to repeat it. For example, 4j moves down 4 lines.
Insert Mode - Inserting/Appending text
- i - start insert mode at cursor
- I - insert at the beginning of the line
- a - append after the cursor
- A - append at the end of the line
- o - open (append) blank line below current line (no need to press return)
- O - open blank line above current line
- ea - append at end of word
- Esc - exit insert mode
Editing
- r - replace a single character (does not use insert mode)
- J - join line below to the current one
- cc - change (replace) an entire line
- cw - change (replace) to the end of word
- c$ - change (replace) to the end of line
- s - delete character at cursor and subsitute text
- S - delete line at cursor and substitute text (same as cc)
- xp - transpose two letters (delete and paste, technically)
- u - undo
- . - repeat last command
Marking text (visual mode)
- v - start visual mode, mark lines, then do command (such as y-yank)
- V - start Linewise visual mode
- o - move to other end of marked area
- Ctrl+v - start visual block mode
- O - move to Other corner of block
- aw - mark a word
- ab - a () block (with braces)
- aB - a {} block (with brackets)
- ib - inner () block
- iB - inner {} block
- Esc - exit visual mode
Visual commands
- > - shift right
- < - shift left
- y - yank (copy) marked text
- d - delete marked text
- ~ - switch case
Cut and Paste
- yy - yank (copy) a line
- 2yy - yank 2 lines
- yw - yank word
- y$ - yank to end of line
- p - put (paste) the clipboard after cursor
- P - put (paste) before cursor
- dd - delete (cut) a line
- dw - delete (cut) the current word
- x - delete (cut) current character
Exiting
- :w - write (save) the file, but don't exit
- :wq - write (save) and quit
- :q - quit (fails if anything has changed)
- :q! - quit and throw away changes
Search/Replace
- /pattern - search for pattern
- ?pattern - search backward for pattern
- n - repeat search in same direction
- N - repeat search in opposite direction
- :%s/old/new/g - replace all old with new throughout file
- :%s/old/new/gc - replace all old with new throughout file with confirmations
Working with multiple files
- :e filename - Edit a file in a new buffer
- :bnext (or :bn) - go to next buffer
- :bprev (of :bp) - go to previous buffer
- :bd - delete a buffer (close a file)
- :sp filename - Open a file in a new buffer and split window
- ctrl+ws - Split windows
- ctrl+ww - switch between windows
- ctrl+wq - Quit a window
- ctrl+wv - Split windows vertically
C++ String references with example
11:14 PM Sayef Azad Sakin
constructors 1.
#include <iostream> #include <string> using namespace std; int main () { char *line = "short line for testing"; // with no arguments string s1; s1 = "Anatoliy"; cout << "s1 is: " << s1 << endl; // copy constructor string s2 (s1); cout << "s2 is: " << s2 << endl; // one argumen string s3 (line); cout << "s3 is: " << s3 << endl; // first argumen C string // second number of characters string s4 (line,10); cout << "s4 is: " << s4 << endl; // 1 - C++ string // 2 - start position // 3 - number of characters string s5 (s3,6,4); // copy word 'line' from s3 cout << "s5 is: " << s5 << endl; // 1 - number characters // 2 - character itself string s6 (15,'*'); cout << "s6 is: " << s6 << endl; // 1 - start iterator // 2 - end iterator string s7 (s3.begin(),s3.end()-5); cout << "s7 is: " << s7 << endl; // you can instantiate string with assignment string s8 = "Anatoliy"; cout << "s8 is: " << s8 << endl; return 0; } OUTPUT: // s1 is: Anatoliy // s2 is: Anatoliy // s3 is: short line for testing // s4 is: short line // s5 is: line // s6 is: *************** // s7 is: short line for te // s8 is: Anatoliy getline 1.
/* 1 getline ( intut_stream, str, delim ); Extracts characters from intut_stream and stores them in str until s.max_size() characters have been extracted, the end of file occurs, or delim is encountered, in which case delim is extracted from istr but is not stored in s 2 getline( Iter, str ) Inputs a string value for str as in the preceding func tion with delim = */#include <iostream> #include <string> #include <vector> #include <fstream> using namespace std; int main () { string str; cout << "Enter string (EOL = $) : "; getline (cin, str, '$'); cout << "Str is : " << str << endl; ifstream In("data.dat"); vectorv; cout << endl << "Read data from file" << endl; while ( ! In.eof() ) { getline (In, str); v.push_back(str); } copy (v.begin(),v.end(), ostream_iterator (cout,"\n")); cout << endl; return 0; } OUTPUT: // Enter string (EOL = $) : Str is : first line // second line$ // // Read data from file // file: "data.dat" // second line // last line << >> operators 1.
#include <iostream> #include <string> using namespace std; int main () { string str; cout << "Enter string for testing : "; cin >> str; cout << "\nString is : " << str << endl; cout << "Enter string for testing " << "(d to quit) : "; while ( cin >> str ) { cout << endl; cout << "String is : " << str << endl; cout << "Enter string for testing " << "( d to quit) : "; } return 0; } OUTPUT: // Enter string for testing : first // String is : first // Enter string for testing ( d to quit) : second // String is : second // Enter string for testing ( + += = operators 1.d to quit) : third // String is : third // Enter string for testing ( d to quit) :
#include <iostream> #include <string> using namespace std; int main () { string str = "Hello"; cout << "str is : " << str << endl; str += ","; str += ' '; cout << "str is : " << str << endl; string s; s = str + "World"; cout << "s is : " << s << endl; char ch = '!'; s += ch; cout << "s is : " << s << endl; return 0; } OUTPUT: // str is : Hello // str is : Hello, // s is : Hello, World // s is : Hello, World! append 1.
#include <iostream> #include <string> using namespace std; int main () { string str = "Nobody is perfect"; string s = ""; // empty string char *ch = "abcdef"; // append string str at the end of s; // return s // appends at the end of s a copy of the n characters // in str, starting at position pos; if n is too // large, characters are copied only until the end // of str is reached; // returns s s.append(str,0,6); cout << "s is : " << s << endl; // appends copies of the characters in the range [inpIt1, // inpIt2] to s; returns s string::iterator inpIt1 = str.begin()+6; //start from ' is' string::iterator inpIt2 = str.end(); s.append(inpIt1,inpIt2); cout << "s is : " << s << endl; // appends three ! s.append(3,'!'); cout << "s is : " << s << endl; // appends the first n characters in ch at the end // of s; returns s s.append(ch,3); cout << "s is : " << s << endl; // appends charArray at the end of s; returns s s.append(ch,3); cout << "s is : " << s << endl; return 0; } OUTPUT: // s is : Nobody // s is : Nobody is perfect // s is : Nobody is perfect!!! // s is : Nobody is perfect!!!abc // s is : Nobody is perfect!!!abcabc assign 1.
#include <iostream> #include <string> using namespace std; int main () { string str = "Nobody is perfect"; string s = ""; char *ch = "Robert Frost"; // assigns a copy of str to s; returns s s.assign(str); cout << "s is : " << s << endl; // assigns to s a copy of the n characters in str, start // ing at position 10: if n is too large, characters are // copied only until the end of str is reached: returns s s.assign(str,10,7); // perfect cout << "s is : " << s << endl; // assigns to s a string consisting of the first n charac // ters in ch: returns s s.assign(ch,6); cout << "s is : " << s << endl; // assigns to s a copy of ch: returns s s.assign(ch); cout << "s is : " << s << endl; // assigns to s a string consisting of the characters in // the range str.begin(), str.end(); returns s s.assign(str.begin(),str.end()); cout << "s is : " << s << endl; // assigns to s a string consisting of n copies of ch; // returns s s.assign(17,'*'); cout << "s is : " << s << endl; return 0; } OUTPUT: // s is : Nobody is perfect // s is : perfect // s is : Robert // s is : Robert Frost // s is : Nobody is perfect // s is : ***************** at 1.
// returns s[pos]#include <iostream> #include <string> using namespace std; int main () { string s = "Nobody is perfect"; // Returns s[pos] for ( int pos = 0; pos < s.length(); ++pos ) cout << s.at(pos) << " "; cout << endl; return 0; } OUTPUT: // N o b o d y i s p e r f e c t begin 1.
// Returns an iterator positioned at the // first character in a string#include <iostream> #include <string> using namespace std; int main () { string str = "C++ is best computer language"; string::iterator It = str.begin(); while ( It != str.end() ) { if ( *It == ' ' ) *It = '\n'; cout << *It++; } cout << endl; return 0; } OUTPUT: // C++ // is // best // computer // language c_str 1.
// returns (the base address of) a char // array containing the characters stored in s, // terminated by a null character.#include <iostream> #include <string> using namespace std; int main () { string str = "Anatoliy"; char *ary = new char[str.length()+1]; // strcpy ( ary, str ); that is wrong way strcpy ( ary, str.c_str() ); // that is correct cout << ary << endl; return 0; } OUTPUT: // Anatoliy capacity 1.
// returns the size (of type size_type) // of the storage allocated in string#include <iostream> #include <string> using namespace std; int main () { string str = "C++ is best computer language"; string::size_type cap; cap = str.capacity(); cout << "Capacity of str is: " << cap << endl; cout << "Size of str is : " << str.size() << endl; cout << "Length of str is : " << str.length() << endl; cout << "Resize the str for 50 character" << endl; str.resize(50); cap = str.capacity(); cout << "Capacity of str is: " << cap << endl; cout << "Size of str is : " << str.size() << endl; cout << "Length of str is : " << str.length() << endl; return 0; } OUTPUT: // Capacity of str is: 32 // Size of str is : 29 // Length of str is : 29 // Resize the str for 50 character // Capacity of str is: 64 // Size of str is : 50 // Length of str is : 50 compare 1.
#include <iostream> #include <string> using namespace std; int main () { string str1 = "string"; string str2 = "String"; string str3 = "second string"; char ch[] = "first string"; cout << "string str1 is : " << str1 << endl; cout << "string str2 is : " << str2 << endl; cout << "char ary ch is : " << ch << endl; cout << "string str3 is : " << str3 << endl; cout << endl; // compare str1 and str2 cout << "1." << endl; size_t comp = str1.compare(str2); cout << "String str1 is "; ( comp == 0 ) ? cout << "equal" : cout << "not equal"; cout << " to string str2" << endl; // compare str1 and literal string "string" cout << "2." << endl; comp = str1.compare("string"); cout << "String str1 is "; ( comp == 0 ) ? cout << "equal" : cout << "not equal"; cout << " to array of char \"string\"" << endl; // 3. and 4. doesn't work with Microsoft // Visual Studio compiler // compare str3 start from pos 7 to 5 // with str1 cout << "3." << endl; comp = str3.compare(str1,7,5); cout << "Part of string str3 is "; ( comp == 0 ) ? cout << "equal" : cout << "not equal"; cout << " to str1" << endl; // compare str3 start from pos 7 // with literal string "string" cout << "4." << endl; comp = str3.compare("string",7); cout << "Part of string str3 is "; ( comp == 0 ) ? cout << "equal" : cout << "not equal"; cout << " to C string \"string\"" << endl; // next 4 'compare' functions // doesn't work with GNU compiler cout << "5." << endl; comp = str1.compare(6,10,ch); cout << "String str1 is "; ( comp == 0 ) ? cout << "equal" : cout << "not equal"; cout << " to part of char ary \"first string\"" << endl; cout << "6." << endl; comp = str1.compare(0,3,str3); cout << "Part of str1 is "; ( comp == 0 ) ? cout << "equal" : cout << "not equal"; cout << " to string \"second string\"" << endl; cout << "7." << endl; comp = str1.compare(1,3,str2,1,3); cout << "String str1 is "; ( comp == 0 ) ? cout << "equal" : cout << "not equal"; cout << " to part of string \"second string\"" << endl; cout << "8." << endl; comp = str1.compare(1,3,str2,1,3); cout << "String str1 is "; ( comp == 0 ) ? cout << "equal" : cout << "not equal"; cout << " to part of string \"second string\"" << endl; return 0; } OUTPUT: GNU compiler // string str1 is : string // string str2 is : String // char ary ch is : first string // string str3 is : second string // // 1. // String str1 is not equal to string str2 // 2. // String str1 is equal to array of char "string" // 3. // Part of string str3 is equal to str1 // 4. // Part of string str3 is equal to C string "string" // 5. // 6. // 7. // 8. OUTPUT: Microsoft Visual Studio compiler // string str1 is : string // string str2 is : String // char ary ch is : first string // string str3 is : second string // // 1. // String str1 is not equal to string str2 // 2. // String str1 is equal to array of char "string" // 3. // 4. // 5. // String str1 is not equal to part of char ary "first // string" // 6. // Part of str1 is not equal to string "second string" // 7. // String str1 is equal to part of string "second string" // 8. // String str1 is equal to part of string "second string" // Press any key to continue copy 1.
#include <iostream> #include <string> using namespace std; int main () { string str = "First Name: Robert"; char fname[255]; cout << "str is: " << str << endl; int n = str.find(':'); str.copy(fname, // copy to array n+1, // how many char 0); // start position from str // must terminate fname with '\0'; fname[n+1] = 0; cout << "fname is: " << fname << endl; return 0; } OUTPUT: // str is: First Name: Robert // fname is: First Name: empty 1.
#include <iostream> #include <string> using namespace std; int main () { string str = "*******"; while ( ! str.empty() ) { cout << str << endl; str.erase(str.end()-1); } cout << endl; return 0; } OUTPUT: // ******* // ****** // ***** // **** // *** // ** // * end 1.
// returns an iterator porsitioned immediately // after the last character in string#include <iostream> #include <string> using namespace std; int main () { string s; string str = "*************************"; size_t pos = str.length(); while ( pos ) { s.assign ( str.begin(),str.end() - pos+1); cout << s << endl; pos -= 5; } return 0; } OUTPUT: // * // ****** // *********** // **************** // ********************* erase 1.
#include <iostream> #include <string> #include <algorithm> using namespace std; int main () { string str, s; for ( char ch = 'a'; ch <= 'z'; ch++ ) str.append(1,ch); s = str; cout << "str is: " << str << endl; cout << "s is: " << str << endl; // removes 13 characters from the beginning str.erase(0,13); cout << "Erased range fron str : " << str << endl; // removes 13 characters starts from 14 str = s.erase(13,13); cout << "Erased range from s : " << str << endl; // removes one character pointed by s.begin() cout << endl << "Erase one, second character from s" << endl; s.erase(s.begin()+1); cout << "s is: " << s << endl; // removes range of characters s.erase(s.begin(),s.begin()+4); cout << "s is: " << s << endl; return 0; } OUTPUT: // str is: abcdefghijklmnopqrstuvwxyz // s is: abcdefghijklmnopqrstuvwxyz // Erased range fron str : nopqrstuvwxyz // Erased range from s : abcdefghijklm // // Erase one, second character from s // s is: acdefghijklm // s is: fghijklm find 1.
#include <iostream> #include <string> #include <algorithm> using namespace std; int main () { string str("C++ is best language"); int pos1, pos2; // size_t or size_type // work not correct // search for first string "best" inside of str // default position is 0 pos1 = str.find ("best"); cout << "Word best is found on position " << pos1+1 << endl; // if pattern is not found - return -1 pos2 = str.find ("best",pos1+1); cout << "Word best is found on position " << pos2+1 << endl; // search for first occurrence of character pos1 = str.find('g'); cout << "First character 'g' found on position " << pos1 << endl; // search for first occurrence of string string s = "is"; pos1 = str.find (s); cout << "Word 'is' is found on position " << pos1+1 << endl; return 0; } OUTPUT: // Word best is found on position 8 // Word best is found on position 0 // First character 'g' found on position 15 // Word 'is' is found on position 5 find_first_not_of 1.
#include <iostream> #include <string> using namespace std; int main () { string str("C++ is best language"); cout << "str is: " << str << endl; int n = str.find_first_not_of("aeiouAEIOU"); cout << "First consonant found at " << n+1 << " position" << endl; return 0; } OUTPUT: // str is: C++ is best language // First consonant found at 1 position find_first_not_of 2.
#include <iostream> #include <string> using namespace std; int main () { string str("C++ is best language"); cout << "str is: " << str << endl; // search first not ' ', // start from position 7 int n = str.find_first_not_of(' ',7); cout << "first not of space character " << "found at position " << n+1 << endl; return 0; } OUTPUT: // str is: C++ is best language // first not of space character found at position 8 find_first_not_of 3.
#include <iostream> #include <string> using namespace std; int main () { string str("C++ is best language"); string s = "C++"; cout << "str is: " << str << endl; // search character from pattern // using the first x chåracters in pattern. // the value position must be given int n = str.find_first_not_of("CBCD",0,3); cout << "first not 'C' is found at position " << n+1 << endl; // search first not of // pattern is string n = str.find_first_not_of(s); cout << "first not of C++ is found " << "at position " << n+1 << endl; return 0; } OUTPUT: // str is: C++ is best language // first not 'C' is found at position 2 // first not of C++ is found at position 4 find_first_of 1.
#include <iostream> #include <string> using namespace std; int main () { string str("C++ is best language"); string s = "be"; cout << "str is: " << str << endl; // search be start from position 2 // if position is ommited - default is 0 int n = str.find_first_of(s,2); cout << "first 'be' found at position " << n+1 << endl; // same as above but search for character n = str.find_first_of('l'); cout << "first character 'l' found at " << "position " << n+1 << endl; // search 'first of' for the characters in // charary char charary[] = " bea"; cout << "charary[] = \" bea\"" << endl; n = str.find_first_of(charary,0); cout << "first character from charary " << "found at position " << n+1 << endl; cout << "Note: position 4 is space" << endl; // same as above but third argumen is // number of character from which searching // starts // this variant of find_first_of dosn't // work properly with GNU compiler n = str.find_first_of(" bae",0,3); cout << "first character from charary " << "found at position " << n+1 << endl; return 0; } OUTPUT: // str is: C++ is best language // first 'be' found at position 8 // first character 'l' found at position 13 // charary[] = " bea" // first character from charary found at position 4 // Note: position 4 is space // first character from charary found at position 4 find_last_not_of 1.
#include <iostream> #include <string> using namespace std; int main () { string str("C++ is best language"); string s = "langue"; int pos = str.length()-1; cout << "str is: " << str << endl; // returns the highest position <= pos of a character // in str that does not match any charcter in s; // returns nopos if there is no such position: // npos is the default value for pos int n = str.find_last_not_of(s, pos); cout << "last_not_of 'langue' found at position " << n+1 << endl; // same as above but search for single character n = str.find_last_not_of('e'); cout << "last_not_of 'e' found at position " << n+1 << endl; char ary[] = "be"; // seawrch for occurence last_not_of // from pattern ary in str n = str.find_last_not_of(ary); cout << "last_not_of 'be' found at position " << n+1 << endl; return 0; } OUTPUT: // str is: C++ is best language // last_not_of 'langue' found at position 12 // last_not_of 'e' found at position 19 // last_not_of 'be' found at position 19 find_last_of 1.
#include <iostream> #include <string> using namespace std; int main () { string str("C++ is best language"); string s = "g"; cout << "str is: " << str << endl; cout << "s is: " << s << endl; int n = str.find_last_of(s); cout << "last_of '" << s << "' faund" << " at position " << n+1 << endl; n = str.find_last_of(' '); cout << "last_of ' ' faund" << " at position " << n+1 << endl; n = str.find_last_of(" la"); cout << "last_of \" la\" faund" << " at position " << n+1 << endl; return 0; } OUTPUT: // str is: C++ is best language // s is: g // last_of 'g' faund at position 19 // last_of ' ' faund at position 12 // last_of " la" faund at position 18 insert 1.
#include <iostream> #include <string> using namespace std; int main () { string str = "C++ language"; string s = "is best"; char ch[] = "C++ language"; cout << "str is: " << str << endl; cout << "s is: " << s << endl; cout << "ch is: " << s << endl; // insert a copy of s into str // at position pos; string::size_type pos = 4; str.insert(pos,s); cout << "str is: " << str << endl; // insert a copy of ch into str at // the position specified by iterator // return an iterator positioned at // this copy int n = str.find('l'); str.insert(str.begin() + n,' '); cout << "str is: " << str << endl; // like above but n x copies of char str.insert(str.end(),3,'!'); cout << "str is: " << str << endl; // insert 4 char from ch into s // at the position 0 s.insert(0,ch,4); cout << "s is: " << s << endl; // insert 8 characters from str // start from position n ('langu...') // into s at position x (end string) n = str.find('l'); int x = s.length(); s.insert(x,str,n,8); cout << "s is: " << s << endl; n = s.find('l'); s.insert(s.begin()+n,' '); cout << "s is: " << s << endl; // insert range (begin - begin+7) of str // into s at position begin+4 s.insert(s.begin()+4,str.begin(),str.begin()+7); cout << "s is: " << s << endl; return 0; } OUTPUT: // str is: C++ language // s is: is best // ch is: is best // str is: C++ is bestlanguage // str is: C++ is best language // str is: C++ is best language!!! // s is: C++ is best // s is: C++ is bestlanguage // s is: C++ is best language // s is: C++ C++ is is best language length 1.
#include <iostream> #include <string> using namespace std; int main () { string str = "C++ is best computer language"; cout << "str is: " << str << endl; cout << "Length of str is : " << str.length() << endl; return 0; } OUTPUT: // str is: C++ is best computer language // Length of str is : 29 max_size 1.
// returns a reverse iterator positioned // at the last character in string#include <iostream> #include <string> using namespace std; int main () { string str = "C++ is best computer language"; cout << "str is: " << str << endl; cout << "max_size of str is: " << str.max_size() << endl; return 0; } OUTPUT: // str is: C++ is best computer language // max_size of str is: 4294967294 rbegin 1.
#include <iostream> #include <string> using namespace std; int main () { string str = "C++ is best computer language"; cout << "str is: " << str << endl; // usual iterator doesn't work string::reverse_iterator It = str.rbegin(); while ( It != str.rend() ) cout << *It++; cout << endl; return 0; } OUTPUT: // str is: C++ is best computer language // egaugnal retupmoc tseb si ++C replace 1.
#include <iostream> #include <string> using namespace std; int main () { string str = "STL is created from Dennis Ritchie"; string s1 = "was"; string s2 = "developed"; string s3 = "Stepanov alexander"; cout << "str is: " << str << endl; cout << "replace 'is' for 'was'" << endl; str.replace(4, // start position in str 2, // how many characters s1); // source for replasment cout << "str is: " << str << endl; cout <<"replace 'created' for 'developed'" << endl; int n = str.find('c'); // pos of 'created' int x = str.find("from") -1; str.replace(str.begin()+n,// start pointer str.begin()+x, // end pointer s2); // source cout << "str is: " << str << endl; cout << "replace 'Dennis' for 'alexander'" << endl; int x1 = str.find('D'); // search Dennis int x2 = str.find(' ',x1+1); // space after int y1 = s3.find("alex"); // search 'alex' int y2 = strlen("alexander"); str.replace(x1, // start position in str x2-x1, // how characters to replace s3, // source for replacement y1, // start positio from source y2); // how chracter start from y1 cout << "str is: " << str << endl; cout << "replace 'from' for 'by'" << endl; char ary[] = "bytes"; n = str.find("from"); // same variant possible with iterators // instead of number of position str.replace(n, // start position in str 4, // how many characters ary, // source 2); // first 2 characters from source cout << "str is: " << str << endl; cout << "replace 'a' for 'A' (alexander)" << endl; n = str.find("alexander"); str.replace(n, // start position in str 1, // how character(s) 1, // how many copies of character 'A'); // character for replasment cout << "str is: " << str << endl; cout << "replace 'Ritchie' for 'Stepanov'" << endl; x1 = str.find('R'); y1 = s3.find(' '); str.replace(str.begin()+x1, // start pointer str.end(), // to the end of str s3.begin(), // start pointer from source s3.begin()+y1 // end pointer from ); // source cout << "str is: " << str << endl; return 0; } OUTPUT: // str is: STL is created from Dennis Ritchie // replace 'is' for 'was' // str is: STL was created from Dennis Ritchie // replace 'created' for 'developed' // str is: STL was developed from Dennis Ritchie // replace 'Dennis' for 'alexander' // str is: STL was developed from alexander Ritchie // replace 'from' for 'by' // str is: STL was developed by alexander Ritchie // replace 'a' for 'A' (alexander) // str is: STL was developed by Alexander Ritchie // replace 'Ritchie' for 'Stepanov' // str is: STL was developed by Alexander Stepanov reverse 1.
#include <iostream> #include <string> using namespace std; int main () { string str = "Anatoliy Urbanskiy"; cout << str.reverse() << endl; return 0; } OUTPUT: resize 1.
// if <=s.size(), truncates rightmost // character in s to make it of size n; otherwise, adds // copies of character ch to end of s to increase it size // to n, or adds a default character value (usually a // blank) if ch is omitted; return type is void#include <iostream> #include <string> using namespace std; int main () { string str = "Alexander Stepanov"; cout << "str is: " << str << endl; cout << "size of str is: " << str.size() << endl; str.resize(11); cout << "after str.resize(11)" << endl; cout << "str is: " << str << endl; cout << "size of str is: " << str.size() << endl; str.resize(20,'.'); cout << "after str.resize(20,'.')" << endl; cout << "str is: " << str << endl; cout << "size of str is: " << str.size() << endl; return 0; } OUTPUT: // str is: Alexander Stepanov // size of str is: 18 // after str.resize(11) // str is: Alexander S // size of str is: 11 // after str.resize(9,'.') // str is: Alexander S......... // size of str is: 20 rfind 1.
#include <iostream> #include <string> using namespace std; int main () { string str = "We go step by step to the target"; string s1 = "step"; cout << "str is: " << str << endl; cout << "s1 is: " << s1 << endl; cout << "int n1 = str.find(s1)" << endl; int n1 = str.find(s1); cout << "n1 = " << n1+1 << endl; cout << "int n2 = str.rfind(s1)" << endl; int n2 = str.rfind(s1); cout << "n2 = " << n2+1 << endl; cout << "n3 = str.rfind(s1,n2-1)" << endl; int n3 = str.rfind(s1,n2-1); cout << "n3 = " << n3+1 << endl; cout << "n1 = str.rfind('t')" << endl; n1 = str.rfind('t'); cout << "n1 = " << n1+1 << endl; cout << "n2 = str.rfind('t',n1-1)" << endl; n2 = str.rfind('t',n1-1); cout << "n2 = " << n2+1 << endl; char ch[] = "step"; cout << "char ch[] = \"step\"" << endl; cout << "n1 = str.rfind(ch)" << endl; n1 = str.rfind(ch); cout << "n1 = " << n1+1 << endl; cout << "n2 = str.rfind(\"stabc\",10,2)" << endl; n2 = str.rfind("stabc", // pattern 10, // start position 2); // for first 2 char // in pattern cout << "n2 = " << n2+1 << endl; return 0; } OUTPUT: // str is: We go step by step to the target // s1 is: step // int n1 = str.find(s1) // n1 = 7 // int n2 = str.rfind(s1) // n2 = 15 // n3 = str.rfind(s1,n2-1) // n3 = 7 // n1 = str.rfind('t') // n1 = 32 // n2 = str.rfind('t',n1-1) // n2 = 27 // char ch[] = "step" // n1 = str.rfind(ch) // n1 = 15 // n2 = str.rfind("stabc",10,2) // n2 = 7 size 1.
#include <iostream> #include <string> using namespace std; int main () { string str = "We go step by step to the target"; string::size_type size = str.size(); cout << "str is: " << str << endl; cout << "size of str = " << size << endl; return 0; } OUTPUT: // str is: We go step by step to the target // size of str = 32 substr 1.
// str.subsr(pos,n); // returns a copy of the substring consisting // of n characters from str, beginning at position pos // (default value 0); if n is too large or is omitted, // characters are copied only until the end of s is // reached#include <iostream> #include <string> using namespace std; int main () { string str = "We go step by step to the target"; cout << "str is: " << str << endl; int n = str.find("step"); string s = str.substr(n); cout << "s is: " << s << endl; s = str.substr(n,12); cout << "s is: " << s << endl; return 0; } OUTPUT: // str is: We go step by step to the target // s is: step by step to the target // s is: step by step swap 1.
#include <iostream> #include <string> using namespace std; int main () { string str1 = "Robert"; string str2 = "Forest"; cout << "str1 is: " << str1 << endl; cout << "str2 is: " << str2 << endl; cout << endl; cout << "str1.swap(str2)" << endl; cout << endl; str1.swap(str2); cout << "str1 is: " << str1 << endl; cout << "str2 is: " << str2 << endl; return 0; } OUTPUT: // str1 is: Robert // str2 is: Forest // // str1.swap(str2) // // str1 is: Forest // str2 is: Robert
Strongly Connected Component (Tarjan)
8:00 PM Sayef Azad Sakin
vector< int > M[MX];
int color[MX],f[MX],low[MX],ftm,st[MX],top,scc;
bool instack[MX];
void dfs(int u){
int i,v,sz;
f[u] = ftm;
low[u] = ftm;
ftm++;
st[top] = u;top++;instack[u] = true;
sz = M[u].size();
color[u] = 1;
for(i=0;i<sz;i++){
v = M[u][i];
if(!color[v]){
dfs(v);
low[u] = _min(low[u],low[v]);
}
else if(instack[v])low[u] = _min(low[u],f[v]);
}
if(f[u] == low[u]){
scc++;
do{
v = st[top-1];top--;instack[v] = false;
printf(" %d",v);
}while(top && v!=u);
printf("\n");
}
}
//n = no.of vertices, m = no.of edges
void tarjanscc(int n){
int i;
ftm = top = 0;
memset(color,0,sizeof(color));
memset(f,0,sizeof(f));
memset(low,0,sizeof(low));
memset(instack,0,sizeof(instack));
for(i=0;i<n;i++){
if(!color[i])dfs(i);
}
printf("total scc: %d\n",scc);
for(i=0;i<=n;i++)M[i].clear();
}
Maximum Flow (basic)
7:58 PM Sayef Azad Sakin
vector < int > M[mx];
int pre[mx], cap[mx][mx];
bool color[mx];
int bfs(int s, int t){
int ok,u,v,sz,i,path_cap;
memset(pre,-1,sizeof(pre));
memset(color,0,sizeof(color));
queue < int > q;
color[s] = 1;
q.push(s);
ok = 1;
while(!q.empty() && ok){
u = q.front();
q.pop();
sz = M[u].size();
for(i=0;i<sz;i++){
v = M[u][i];
if(!color[v] && cap[u][v] > 0){
q.push(v);
color[v] = 1;
pre[v] = u;
if(v==t){ok = 0;break;}
}
}
}
path_cap = inf;
u = t;
while(pre[u]!=-1){
v = pre[u];
path_cap = _min(path_cap, cap[v][u]);
u = v;
}
u = t;
while(pre[u]!=-1){
v = pre[u];
cap[v][u] -= path_cap;
cap[u][v] += path_cap;
u = v;
}
if(path_cap==inf)return 0;
return path_cap;
}
int max_flow(int s, int t){
int r,pcap;
r = 0;
while(true){
pcap = bfs(s,t);
if(!pcap)break;
r += pcap;
}
return r;
}
Minimum Spanning Tree (Kruskal)
7:57 PM Sayef Azad Sakin
struct node {
int u,v,w;
bool operator < ( const node &b) const{
return w<b.w;
}
}e[mx];
int pr[mx];
int find(int r) { return r==pr[r]?r:(pr[r]=find(pr[r])); }
int mst(int n,int m){
int i,u,v,r=0;
for(i=1;i<=n;i++) pr[i]=i;
sort(e,e+m);
for(i=0;i<m;i++) {
u=find(e[i].u);
v=find(e[i].v);
if(u!=v) {
r+=e[i].w;
pr[u]=v;
}
}
return r;
}
Max flow with min cut
7:54 PM Sayef Azad Sakin
vector < int > M[mx];
i64 cap[mx][mx], CAP[mx][mx];
int pre[mx];
bool color[mx];
i64 bfs(int s, int t){
int ok,u,v,sz,i;
i64 path_cap;
memset(pre,-1,sizeof(pre));
memset(color,0,sizeof(color));
queue < int > q;
color[s] = 1;
q.push(s);
ok = 1;
while(!q.empty() && ok){
u = q.front();
q.pop();
sz = M[u].size();
for(i=0;i<sz;i++){
v = M[u][i];
if(!color[v] && cap[u][v] > 0){
q.push(v);
color[v] = 1;
pre[v] = u;
if(v==t){ok = 0;break;}
}
}
}
path_cap = inf;
u = t;
while(pre[u]!=-1){
v = pre[u];
path_cap = _min(path_cap, cap[v][u]);
u = v;
}
u = t;
while(pre[u]!=-1){
v = pre[u];
cap[v][u] -= path_cap;
cap[u][v] += path_cap;
u = v;
}
if(path_cap==inf)return 0;
return path_cap;
}
i64 max_flow(int s, int t){
i64 r,pcap;
r = 0;
while(true){
pcap = bfs(s,t);
if(!pcap)break;
r += pcap;
}
return r;
}
void dfs(int u){
int sz,i,v;
color[u] = 1;
sz = M[u].size();
for(i=0;i<sz;i++){
v = M[u][i];
if(!color[v] && cap[u][v] && CAP[u][v])dfs(v);
}
}
void printMinCut(int s, int t, int n){
int u,sz,v,i;
u = max_flow(s,t);
memset(color,0,sizeof(color));
dfs(s);
for(u=1;u<=n;u++)if(color[u]){
sz = M[u].size();
for(i=0;i<sz;i++){
v = M[u][i];
if(!color[v] && !cap[u][v] && CAP[u][v])printf("%d %d\n",u,v);
}
}
}
Convex Hull (Grahm Scan)
7:47 PM Sayef Azad Sakin
point fp;
bool cmp(const point &a,const point &b){
i64 d = isLeft(fp,a,b);
if(d<0)return false;
if(feq(d,(i64)0) && (dist(fp,a) > dist(fp,b)) )return false;
return true;
}
void ConvexHull(point p[], point c[], int &np, int &nc){
int i,j,pos = 0,k;
i64 dd;
bool flg=0;
for(i=1;i<np;i++){
if( (p[i].x < p[pos].x) || ( feq(p[i].x,p[pos].x) && p[i].y < p[pos].y) )pos = i;
dd = isLeft(p[0],p[i],p[(i+1)%np]);
if(!flg && !feq(dd,(i64)0))flg=1;
}
swap(p[pos],p[0]);
fp = p[0];
sort(p+1,p+np,cmp);
c[0] = p[0];
c[1] = p[1];
c[2] = p[2];
for(i = j = 3; i < np; i++){
while(isLeft(c[j-2],c[j-1],p[i]) < 0)j--;
c[j++] = p[i];
}
i--;
for(k=i-1;k>=0 && flg;k--){
dd = isLeft(c[0],p[k],p[i]);
if(!feq(dd,(i64)0))break;
c[j++] = p[k];
}
if(np>2)nc = j;
else nc = np;
}
inline i64 PolygonArea(point p[],int np){
i64 area = 0;
for(int i = 0;i < np; i++){
area += ( (p[i].x*p[(i+1)%np].y) - (p[i].y*p[(i+1)%np].x) );
}
return area;
}
Miscellaneous Geometry
7:44 PM Sayef Azad Sakin
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <vector>
#include <map>
#include <algorithm>
using namespace std;
#define mx 100
#define pii pair < int, int >
#define i64 long long
#define eps 1e-9
#define _min(i,j) ((i)>(j+eps)?(j):(i))
#define _max(i,j) ((i)>(j+eps)?(i):(j))
struct point{
i64 x,y;
point(){}
point(i64 xx, i64 yy){x = xx;y = yy;}
};
struct line { // Creates a line with equation ax + by + c = 0
i64 a, b, c;
line() {}
line( point p1,point p2 ) {
a=p1.y-p2.y;
b=p2.x-p1.x;
c=p1.x*p2.y-p2.x*p1.y;
}
};
struct segment{
point st,end;
segment(){}
segment(point a,point b){st = a;end = b;}
};
struct rect{
point ul,lr;
rect(){}
rect(point a, point b){ul = a;lr = b;}
};
struct tr{
point p[3];
tr(){}
tr(point a, point b, point c){p[0] = a; p[1] = b; p[2] = c;}
};
struct circle{
i64 r;
point center;
circle(){}
circle(point b,i64 a){r = a; center = b;}
};
struct polygon {
int n;
point P[mx];
};
inline bool feq(i64 a, i64 b){
return (fabs(a-b)<eps);
}
inline i64 dist(point a, point b){
return ( (a.x-b.x) * (a.x-b.x) + (a.y-b.y) * (a.y-b.y) );
}
inline i64 isLeft(point a, point b, point c){
return ( (a.x*b.y) + (b.x*c.y) + (c.x*a.y) - (a.y*b.x) - (b.y*c.x) - (c.y*a.x) );
}
inline bool onSegment(point a,point b,point c){
if( (_min(a.x,b.x) < c.x || feq(_min(a.x,b.x),c.x)) && (c.x < _max(a.x,b.x) || feq(c.x,_max(a.x,b.x))) )
if( (_min(a.y,b.y) < c.y || feq(_min(a.y,b.y),c.y) ) && (c.y < _max(a.y,b.y) || feq(c.y,_max(a.y,b.y))) )return true;
return false;
}
inline bool isSegIntersect(point p1,point p2,point p3,point p4){
i64 d1,d2,d3,d4;
d1 = isLeft(p1,p2,p3);
d2 = isLeft(p1,p2,p4);
d3 = isLeft(p3,p4,p1);
d4 = isLeft(p3,p4,p2);
if( (d1*d2)<0 && (d3*d4)<0 )return true;
else if(feq(d1,(i64)0) && onSegment(p1,p2,p3))return true;
else if(feq(d2,(i64)0) && onSegment(p1,p2,p4))return true;
else if(feq(d3,(i64)0) && onSegment(p3,p4,p1))return true;
else if(feq(d4,(i64)0) && onSegment(p3,p4,p2))return true;
return false;
}
inline bool intersection( line L1, line L2, point &p ) {// If two line intersect each other
i64 det = L1.a * L2.b - L1.b * L2.a;
if( feq(det,(i64)0) ) return false;
p.x = ( L1.b * L2.c - L2.b * L1.c ) / det;
p.y = ( L1.c * L2.a - L2.c * L1.a ) / det;
return true;
}
inline bool inRect(rect r, point p){// If a point inside a rectangle
if( (p.x > r.ul.x && p.x < r.lr.x) && (p.y < r.ul.y && p.y > r.lr.y) ) return true;
return false;
}
inline bool inTr(tr t, point p){// If a point inside a triangle
i64 d,d1,d2,d3;
d = fabs( isLeft(t.p[0],t.p[1],t.p[2]) );
d1 = fabs( isLeft(t.p[0],t.p[1],p) );
if( feq(d1,(i64)0) && onSegment(t.p[0],t.p[1],p) )return false;
d2 = fabs( isLeft(t.p[1],t.p[2],p) );
if( feq(d2,(i64)0) && onSegment(t.p[1],t.p[2],p) )return false;
d3 = fabs( isLeft(t.p[2],t.p[0],p) );
if( feq(d3(i64)0) && onSegment(t.p[2],t.p[0],p) )return false;
return feq(d,d1+d2+d3);
}
inline bool inCircle(circle c,point p){// If a point inside a circle
if( dist(c.center,p)+eps < c.r ) return true;
return false;
}
Bipartite Matching (Basic)
7:16 PM Sayef Azad Sakin
#define mx 210
vector < int > g[mx];
int lf[mx],rt[mx],n;
bool vis[mx];
bool dfs(int p) {
int i,j=g[p].size();
for(i=0;i<j;i++) if(!vis[g[p][i]]) {
vis[g[p][i]]=1;
if(rt[g[p][i]]==-1 || dfs(rt[g[p][i]])) {
rt[g[p][i]]=p;
lf[p]=g[p][i];
return true;
}
}
return false;
}
int bpm() {
int i,q=0;
memset(lf,-1,sizeof lf);
memset(rt,-1,sizeof rt);
for(i=0;i<n;i++) {
memset(vis,0,sizeof vis);
if(dfs(i))q++;
}
return q;
}
Bellman Ford
4:51 PM Sayef Azad Sakin
vector < pii > M[mx];
int d[mx];
bool bellman_ford(int s,int n){
int i,u,j,sz,v,w;
bool done = false;
for(i=0;i<n;i++)d[i] = inf;
d[s] = 0;
for(i=0;i<n && !done;i++){
done = true;
for(u=0;u<n;u++){
sz = M[u].size();
for(j=0;j<sz;j++){
v = M[u][j].first;
w = M[u][j].second;
if(d[v] > (d[u] + w)){
d[v] = d[u] + w;
done = false;
}
}
}
}
return done;
}
Bridge Network
4:50 PM Sayef Azad Sakin
#define mx 110
#define _min(i,j) ((i)>(j)?(j):(i))
int d[mx],low[mx],t;
bool color[mx],artp[mx];
vector < int > M[mx];
vector < pii > bridge;
void dfs(int par, int u){
int sz,i,v;
low[u] = d[u] = ++t;
color[u] = 1;
sz = M[u].size();
for(i=0;i<sz;i++){
v = M[u][i];
if(v==par)continue;
if(!color[v]){
dfs(u,v);
low[u] = _min(low[u],low[v]);
if(low[v] > d[u])
bridge.push_back(pii(u,v));
}
else low[u] = _min(low[u],d[v]);
}
}
Articulation Point
4:48 PM Sayef Azad Sakin
#define mx 110
#define _min(i,j) ((i)>(j)?(j):(i))
int d[mx],low[mx],t;
bool color[mx],artp[mx];
vector < int > M[mx];
void dfs(int par, int u){
int sz,i,v,child = 0;
low[u] = d[u] = ++t;
color[u] = 1;
sz = M[u].size();
for(i=0;i<sz;i++){
v = M[u][i];
if(v==par)continue;
if(!color[v]){
child++;
dfs(u,v);
low[u] = _min(low[u],low[v]);
if(low[v] >= d[u] && par!=-1)artp[u] = 1;
}
else low[u] = _min(low[u],d[v]);
}
if(par == -1 && child > 1 && !artp[u])artp[u] = 1;
}
Single Source Shortest Path (Dijkstra)
4:45 PM Sayef Azad Sakin
struct comp {
bool operator() (const pii &a, const pii &b) {
return a.second > b.second;
}
};
int color[mx], d[mx], nodes;
vector < pii > path[MX];
int dijkstra(int source, int dest){
int u,v,sz,y,z;
priority_queue< pii, vector< pii >,comp > q;
for(v = 1; v<=nodes; v++){
color[v] = 0;
d[v] = inf;
}
d[source] = 0;
q.push(pii(source, 0));
while(!q.empty()){
u = q.top().first;
if(u==dest)break;
q.pop();
if(color[u])continue;
sz = path[u].size();
for(v=0;v<sz;v++){
y = path[u][v].first;
z = path[u][v].second;
if(!color[y] && d[u]+z < d[y]){
d[y] = d[u]+z;
q.push(pii(y,d[y]));
}
}
color[u] = 1;
}
return d[dest];
}
Bigmod (a^b%m)
4:44 PM Sayef Azad Sakin
i64 bigmod(i64 a,i64 b,i64 d) {
i64 r=1;
while(b) {
if(b&1) r=(r*a)%d;
b>>=1; a=(a*a)%d;
}
return r;
}
Number of Divisor
4:40 PM Sayef Azad Sakin
i64 noOfDivisor(i64 n){
int j,f;
i64 cnt,ans=1;
f = 0;
for(j=0;prime[j]<=n && j<prlen;j++){
cnt = 0;
if(n%prime[j]==0){
while(n%prime[j]==0){
cnt++;
n /= prime[j];
}
f=1;
ans *= (cnt+1);
}
}
//if(!f || n!=1)cnt++;
if(n^1)ans <<= 1;
return ans;
}
Template
4:37 PM Sayef Azad Sakin
//Bismillahir Rahmanir Rahim
//#pragma warning(disable:4786)
//#pragma comment(linker,"/STACK:514850816")
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cctype>
#include <cstring>
#include <climits>
#include <string>
#include <sstream>
#include <queue>
#include <stack>
#include <vector>
#include <set>
#include <map>
#include <list>
#include <algorithm>
using namespace std;
#define mx 100000
#define pii pair < int, int >
#define i64 __int64
#define inf 2147483647
#define eps 1e-11
#define pi 2*acos(0.0)
int gcd( int a, int b ) { return !b ? a : gcd ( b, a&b );}
struct Euclid{
int x,y,d;
Euclid(){}
Euclid( int xx, int yy, int dd ) { x = xx, y = yy, d = dd; }
};
Euclid egcd( int a, int b){
if(!b)return Euclid(1,0,a);
Euclid r = egcd(b,a%b);
return Euclid( r.y, r.x - a / b * r.y, r.d);
}
Prime Factorization
4:36 PM Sayef Azad Sakin
void PrimeFact( int n, int *factors, int *factCount, int &len){
int i,count, sqrtN;
sqrtN = (int) sqrt( (double) n ) + 1;
for(i = 0; prime[i] < sqrtN ; i++)if(!(n%prime[i])){
factors[len] = prime[i]; count = 0;
while(!(n%prime[i]))n/=prime[i], count++;
factCount[len++] = count;
sqrtN = (int) sqrt( (double) n ) + 1;
}
if(n>1)factors[len] = n, factCount[len++] = 1;
}
Generating Prime (Sieve)
4:34 PM Sayef Azad Sakin
#define mx 100000
#define chkp(n) (prm[n>>6]&(1<<((n>>1)&31)))
#define genp(n) (prm[n>>6]|=(1<<((n>>1)&31)))
#define PrimeLimit 10000000
int prm[PrimeLimit / 64], prime[mx], prlen;
void GeneratePrime(){
int i,j,sqrtN;
prlen = 0;
prime[prlen++]=2;
sqrtN = ( int ) sqrt ( ( double ) PrimeLimit ) + 1;
for(i=3;i<sqrtN;i+=2)if(!chkp(i)){
prime[prlen++] = i;
for(j=(i*i);j<PrimeLimit;j+=(i<<1))genp(j);
}
for(;i<PrimeLimit;i+=2)if(!chkp(i))prime[prlen++]=i;
}
Bignumber Subtraction
4:26 PM Sayef Azad Sakin
void Subtraction(char *f, char *s, char *ans){
int lenf,lens,a,carry,ind,b;
lenf = strlen(f)-1; lens = strlen(s)-1;
carry = ind = 0;
while(lens >=0 || lenf >=0){
b = ((lens >=0)?(s[lens--]-'0'):0) + carry;
if(f[lenf] >=(b+'0')){a = f[lenf--]-'0';carry = 0;}
else{a = f[lenf--]-'0' + 10;carry = 1;}
ans[ind++] = (a - b) + '0';
}
for(ind--;ind >=0;ind--)if(ans[ind]!='0')break;
ans[++ind] = 0;
reverse(ans,ans+ind);
}
Bignumber Multiplication
4:22 PM Sayef Azad Sakin
void Multiplication(char *f, char *s, char *sum){
int lenf,lens,i,j,k,carry,a;
memset(sum,0,sizeof(sum));
lenf = strlen(f);lens = strlen(s);
reverse(f,f+lenf);reverse(s,s+lens);
for(i=0;i < lens;i++){
carry = 0;k = i;
for(j=0;j < lenf;j++){
a = ( (f[j]-'0') * (s[i]-'0') ) + carry;
if(i) a += (sum[k]-'0');
sum[k++] = (a%10) + '0';
carry = a/10;
}
if(carry)sum[k++] = carry + '0';
sum[k++] = '0';
}
for(k--;k >=0;k--)if(sum[k]!='0')break;
sum[++k] = 0;
reverse(sum,sum+k);
}
Bignumber Addition
12:10 PM Sayef Azad Sakin
void Addition(char *f, char *s, char *ans){
int lenf,lens,a,carry,ind;
lenf = strlen(f)-1; lens = strlen(s)-1;
carry = ind = 0;
while(lens > =0 || lenf > =0){
a = ((lens > =0) ? (s[lens--]-'0') : 0) + ((lenf > =0) ? (f[lenf--]-'0') : 0) + carry;
ans[ind++] = (a%10) + '0';
carry = a/10;
}
if(carry)ans[ind++] = carry + '0';
ans[ind] = 0;
reverse(ans,ans+ind);
}