Category ArchiveCode
C++ 07 Feb 2010 03:41 pm
C++ Convert Int to String Speed
(There is also an opposite string-to-int performance test.)
(Updated 2011-02-05: Added a hand-made function as baseline; re-run all tests, and with new clang++ from svn)
A performance benchmark of which method is faster of converting an integer to an std::string. The goal is ending up with an std::string representation of the input integer.
The tested methods are:
- naive loop into a std::string
- sprintf() into a char[] buffer, then std::string(buffer)
- snprintf() into a char[] buffer, then std::string(buffer)
- sprintf() into &std::string[0], and .resize() to fit
- snprintf() into &std::string[0], and .resize() to fit
- output to a std::stringstream, then std::string = stream.str()
- as above, but reusing the stringstream object
- std::strstream(&string[0]) then .resize(stream.pcount())
- std::string = boost::lexical_cast<std::string>()
- Boost.Spirit.Karma generate into a char[] buffer, then std::string(buffer)
Source for the test is at speed-convert-int-to-string.cpp with cycle.h.
The compilers are Microsoft Visual C++ 2010 Express as VC10 with _SECURE_SCL disabled, GNU g++ 4.4.1, and clang++ from svn.
Continue Reading »
C++ 02 Feb 2010 04:38 pm
C++ Find Unique Elements Speed
A performance benchmark of which method is faster of finding all unique elements of a vector. The goal is having an ordered container with just the unique elements, where the tested methods are std::sort()+std::unique()+erase(), versus inserting into a separate std::set, versus inserting into std::unordered_set and then into std::set, and finally inserting into boost::unordered_set and then into std::set.
Source for the integer version is speed-find-unique-int.cpp with cycle.h.
The compilers are Microsoft Visual C++ 2010 Express as VC10 with _SECURE_SCL disabled, and GNU g++ 4.3.2.
Continue Reading »
C++ 01 Feb 2010 03:32 pm
Snippet: Dynamic Box of Strings
//tinodidriksen.com/uploads/code/cpp/dynamic-string-box.cpp
#include <iostream> #include <algorithm> #include <string> #include <vector> int main() { std::vector<std::string> strs; strs.push_back("Hello World!"); strs.push_back("This is a text line."); strs.push_back("Shorter line."); size_t maxl = 0; for (size_t i = 0 ; i<strs.size() ; ++i) { maxl = std::max(maxl, strs[i].length()); } std::cout << std::string(maxl+4, '*') << std::endl; for (size_t i = 0 ; i<strs.size() ; ++i) { std::cout << "* " << strs[i] << std::string(maxl-strs[i].length()+1, ' ') << "*" << std::endl; } std::cout << std::string(maxl+4, '*') << std::endl; }
C++ 31 Jan 2010 11:46 pm
Snippet: Sort Unique Vector
//tinodidriksen.com/uploads/code/cpp/sort-unique-vector.cpp
#include <vector> #include <iostream> #include <algorithm> int main() { std::vector<int> vec1; vec1.push_back(1); vec1.push_back(2); vec1.push_back(3); vec1.push_back(1); vec1.push_back(2); vec1.push_back(3); vec1.push_back(1); std::sort(vec1.begin(), vec1.end()); vec1.erase(std::unique(vec1.begin(), vec1.end()), vec1.end()); std::cout << vec1.size() << std::endl; std::cout << vec1[0] << vec1[1] << vec1[2] << std::endl; }
C++ 31 Jan 2010 11:37 pm
Snippet: Vector to Output Stream
//tinodidriksen.com/uploads/code/cpp/vector-to-ostream.cpp
#include <ostream> #include <iostream> #include <vector> template<typename T> std::ostream& operator<<(std::ostream& stm, const std::vector<T>& obj) { stm << "["; if (!obj.empty()) { for (size_t i = 0 ; i<obj.size()-1 ; ++i) { stm << obj[i] << ","; } stm << obj.back(); } stm << "]"; return stm; } int main() { std::vector<int> vec; vec.push_back(1); vec.push_back(2); vec.push_back(3); vec.push_back(2); vec.push_back(5); vec.push_back(6); vec.push_back(1); std::cout << vec << std::endl; }