Jun 7, 2014 · Comments
code
linked listc++algo
Deleting a Node from Singly Linked List is rather straight forward.
You have to know the head first of all
Start by checking the head if that’s the one you are looking for
Keep moving forward and checking - always check for null pointers everywhere
Before we talk about the code, let’s see how Linked List is setup.
Now, below is the code for it….
Code
As usual the code is available here:
https://github.com/abhi1010/Algorithms
May 26, 2014 · Comments
code
c++
What is wrong with the following code?
The issue is very simple but hard to notice. If you try to compile this, you will get the following errors:
main.cpp:24:5: error: need 'typename' before 'OuterStruct<T2>::InnerStruct' because 'OuterStruct<T2>' is a dependent scope
OuterStruct<T2>::InnerStruct mUsingInner;
^
main.cpp: In function 'int main(int, char**)':
main.cpp:34:13: error: 'struct InnerStruct_Wrapper<int>' has no member named 'mUsingInner'
wrapper.mUsingInner = innerStrct;
The Issue
At least it straight away tells you something is wrong with InnerStruct_Wrapper
. Here’s what is happening:
The compiler does not know that mUsingInner in that line is actually a variable of type “OuterStruct::InnerStruct”
InnerStruct will only be known later when it is being instantiated
Compiler cannot figure out what InnerStruct means here. It could be a type or a member variable
The Fix
The only way here is to help the compiler by telling it beforehand that is going to be a class or struct type. The way to tell the compiler that something like this is supposed to be a type name is to throw in the keyword “typename”. The “typename” keyword has to be used everytime you want to tell the compiler that it should expect a Type in its place.
One place where this is used quite a lot is when templates have to implement iterators.
Full Code
The full sample code, along with the fix is provided on Stacked-Crooked.
May 19, 2014 · Comments
code
bashvimtips
Writing code using VIM can be a bit overwhelming but it helps creating a few shortcuts there to make your life easier. Here I will discuss a few.
- First of all, it is always a good idea to set up your tabs and spaces
- Set up shortcuts for:
Toggling of Auto-Indent
while pasting source text; very useful in code (F2 in my provided script)
Toggling of Auto-Scroll
of Split windows (F3 in my provided script)
Macro for Folding functions
within the source code (@q in my provided script)
Smart case search
- based on whether the input is in caps or not
Toggling of Mouse Usage
in VIM window - to allow quick selection of text (F12 in my provided script)
Please see the provided script below to have a look.
May 19, 2014 · Comments
codetips
awkbash
I’ve had this need quite a few times to pull out a section of logs that would begin with a particular line and end with another. grep is not exactly useful there because it only prints out sections based on line counters (using -A/B/C) lines based on a single search pattern.
I came up with a script that can run at almost same speeds using grep/cat/awk
. awk
is used to decide whether the end of the section has been reached or not. Some features of the script are:
Since awk
script only toggles one variable it works seamlessly without delaying the actual work
Works on gzip files as well
If you do not want to depend on grep or are unsure how many lines may be between begin and end keyword then replace gunzip with zcat and grep with cat.
Usage: group filename printBeginKeyword printUntilKeyword NumOfLines
Let’s have a look at the script….
Apr 15, 2014 · Comments
code
c++
When to use 64-bit?
If your application needs more than 2-4gb of data
- If your application intensively uses 64-bit arithmetic
- * 32-bit x86 compiled applications are restricted to x86 instruction set, even when run on on a 64-bit machine
- x64 supports 16 registers compared to just 8 in x86. If your code is computation intensive this may help a great deal
When to use 32-bit?
After reading so many great things about 32 bit, why would anybody still want to code against 32-bit? Simple reason - code compiled in 32-bit takes lesser memory. For example, a pointer in 64-bit machine is 8 bytes compared to 4 bytes with 32-bit. Now imagine how many pointers do you have going around in your code?
When to not use 64-bit?
Sometimes if your code is running on a machine that does not have too much of space then it is a never a great idea to use 64-bit compilation because the same task can probably be done much better using 32-bit version. L2 and L3 caches will be utilized a lot more in 64-bit code (and a lot earlier as well) compared to 32-bit; on such systems.
Summary
Always benchmark your code and ensure that the application actually needs more than 2-4Gb of space.
Apr 8, 2014 · Comments
codetips
c++
Here’s a short snippet to split a string into multiple tokens; into a vector. As you will see that, if you run the code, boost version performs better because you can choose a number of delimiters to split your string instead of the vanilla version using the normal C++ code. Of course, you may also write your own code to do something like this but I was looking to do some short snippets.
I have posted my code on Stacked-Crooked which you can view along with the output as well. It shows C++ doesn’t perform so well.
Mar 19, 2014 · Comments
code
sortingalgoc++
I had written about sorting algorithms (Tag: Sorting) with details about what to look out for along with their code snippets but I wanted a do a quick comparison of all the algos together to see how do they perform when the same set of input is provided to them. Hence I started working on a simple implementation for each one of them. I have now put together all of them in a single project on GitHub. I ensured that they all have the same set of procedures during their run. Some of the items I wanted to ensure was:
Some of the algorithms being tested were:
How did we ensure Equality?
Code
As usual the code for the project is available here:
https://github.com/abhi1010/Algorithms
It can be run using Visual Studio without any changes.
Numbers
Looking at the numbers below, it may be hard to compare the actual values. Hence I decided to normalize
them by calculating how much time will be required to sort 100 numbers
using the same rate as the actual numbers. They are provided for all algorithms on the right-most column.
|
# of Items in Array
|
Time Taken
|
Average for 100 numbers
|
Random
|
10
|
0.047464
|
0.47464
|
1K
|
5.41906
|
0.541906
|
1M
|
8444.11
|
0.844411
|
Sorted
|
10
|
0.027155
|
0.27155
|
1K
|
4.47016
|
0.447016
|
1M
|
6323.05
|
0.632305
|
### Merge Sort 2
|
**# of Items in Array**
|
**Time Taken**
|
**Average for 100 numbers**
|
**Random**
|
10
|
0.033668
|
0.33668
|
1K
|
3.89374
|
0.389374
|
1M
|
7076.04
|
0.707604
|
**Sorted**
|
10
|
0.019034
|
0.19034
|
1K
|
2.7833
|
0.27833
|
1M
|
4664.16
|
0.466416
|
### [Insertion Sort](http://codersdigest.wordpress.com/2012/09/18/insertion-sort/)
|
**# of Items in Array**
|
**Time Taken**
|
**Average for 100 numbers**
|
**Random**
|
10
|
0.006095
|
0.06095
|
1K
|
0.369859
|
0.0369859
|
1M
|
323.878
|
0.0323878
|
**Sorted**
|
10
|
0.005022
|
0.05022
|
1K
|
0.11696
|
0.011696
|
1M
|
122.427
|
0.0122427
|
### [Heap Sort 1](http://codersdigest.wordpress.com/2012/10/17/heap-sort/)
|
**# of Items in Array**
|
**Time Taken**
|
**Average for 100 numbers**
|
**Random**
|
10
|
0.013543
|
0.13543
|
1K
|
3.22043
|
0.322043
|
1M
|
4770.14
|
0.477014
|
**Sorted**
|
10
|
0.007507
|
0.07507
|
1K
|
0.625425
|
0.0625425
|
1M
|
633.142
|
0.0633142
|
### [Heap Sort 2](http://codersdigest.wordpress.com/2012/10/17/heap-sort/)
|
**# of Items in Array**
|
**Time Taken**
|
**Average for 100 numbers**
|
**Random**
|
10
|
0.019352
|
0.19352
|
1K
|
3.86284
|
0.386284
|
1M
|
8914.22
|
0.891422
|
**Sorted**
|
10
|
0.011289
|
0.11289
|
1K
|
3.49712
|
0.349712
|
1M
|
6661.45
|
0.666145
|
### [Heap Sort 3](http://codersdigest.wordpress.com/2012/10/17/heap-sort/)
|
**# of Items in Arraytrong>**
|
**Time Taken**
|
**Average for 100 numbers**
|
**Random**
|
10
|
0.016266
|
0.16266
|
1K
|
0.968032
|
0.0968032
|
1M
|
900.004
|
0.0900004
|
**Sorted**
|
10
|
0.012845
|
0.12845
|
1K
|
3.08637
|
0.308637
|
1M
|
3839.23
|
0.383923
|
### [QuickSort](http://codersdigest.wordpress.com/2012/09/22/quick-sort/)
|
**# of Items in Array**
|
**Time Taken**
|
**Average for 100 numbers**
|
**Random**
|
10
|
0.072972
|
0.72972
|
1K
|
2.74698
|
0.274698
|
1M
|
4640.77
|
0.464077
|
**Sorted**
|
10
|
0.042773
|
0.42773
|
1K
|
1.84335
|
0.184335
|
1M
|
2473.42
|
0.247342
|
### [Counting Sort](http://codersdigest.wordpress.com/2012/09/11/counting-sort/)
|
**# of Items in Array**
|
**Time Taken**
|
**Average for 100 numbers**
|
**Random**
|
10
|
0.022982
|
0.22982
|
1K
|
1.21822
|
0.121822
|
1M
|
1823.85
|
0.182385
|
**Sorted**
|
10
|
0.026815
|
0.26815
|
1K
|
1.19146
|
0.119146
|
1M
|
1612.58
|
0.161258
|
### [Radix Sort](http://codersdigest.wordpress.com/2012/09/13/radix-sort/)
|
**# of Items in Array**
|
**Time Taken**
|
**Average for 100 numbers**
|
**Random**
|
10
|
0.033351
|
0.33351
|
1K
|
3.22004
|
0.322004
|
1M
|
5650.9
|
0.56509
|
**Sorted**
|
10
|
0.020659
|
0.20659
|
1K
|
3.26273
|
0.326273
|
1M
|
5683.91
|
0.568391
|
Feb 11, 2014 · Comments
code
bashvim
You must be knowing about regular VIM search
%s/SEARCH/REPLACE/CMD
However, sometimes you do not want to replace something but just see all instances of the a word or phrase. In such cases, global search is really useful when on vim. The syntax is simpler than normal search-replace:
:[range]g[lobal]/{pattern}/[cmd]
This will show all instances of the “SEARCH” term within the VIM window. There’s another version of the same command which is as follows:
:[range]g[lobal]!/{pattern}/[cmd]
This is similar to the previous command but the only difference is that this command contains “!” which signifies that the command will be executed on all lines NOT
matching the pattern
.
One example here would be to delete all lines in a file containing a particular word:
:g/deleteMe/d
There could be lot more actions (regular vim stuff) that you could do like yanking or indenting.
Nov 9, 2013 · Comments
code
c-sharpexcel
Recently had to work on an Excel and update its content when some events were triggered on a Bloomberg terminal. I couldn’t find any code for reading the excel file using C# so thought of putting that up.
There were a few things to learn:
Excel support is not available by default so make sure to add Microsoft.Office.Interop.Excel as a reference
Sometime indexing to reference the Workbooks or Worksheets may not work so try out other values
- I remember this was not a problem with Visual Studio 2010 but something must have happened in Visual Studio 2012
It is also possible to try Workbook names to try and retrieve them
Please follow the shortened code to read an Excel file after the break.
Oct 13, 2013 · Comments
code
c-sharp
I have been doing extensive research today regarding shared memory in linux before I embark on a new project in which shaving time off process communication latency is extremely important. I found some very interesting links as well. Let’s break them down:
Topic |
Description |
Link |
Theory/Explanation |
Some articles that explain how to get started |
open-std |
Content in the first column |
Content in the second column |
lkd |
|
IPC Mechanisms – some recommendations. Mainly talks about softwares like Boost, dBus dBus used to work using kernel levels but lately have come up with a patch that bypasses kernels |
Stackoverflow |
|
What every programmer should know about memory |
LWN |
|
Linux IPC |
TLDP |
|
Cache Friendly Code |
Stackoverflow |
|
Helpful Articles Which linux IPC technique to use? |
Stackoverflow |
|
Inter process communication – talks about shared memory |
ALP |
|
Linux Poll Events on Shared Memory |
Stackoverflow |
|
Using semaphores in Shared Memory |
Stackoverflow |
|
Sharing semaphores between Shared Memory |
Stackoverflow |
|
Sharing memory between processes |
Stackoverflow |
|
Reserving memory at kernel boot up (DMA) |
Stackoverflow |
Extra |
IPC Shared memory samples |
linuxgazette |