online compiler and debugger for c/c++

code. compile. run. debug. share.
Source Code   
Language
/****************************************************************************** Welcome to GDB Online. GDB online is an online compiler and debugger tool for C, C++, Python, Java, PHP, Ruby, Perl, C#, VB, Swift, Pascal, Fortran, Haskell, Objective-C, Assembly, HTML, CSS, JS, SQLite, Prolog. Code, Compile, Run and Debug online from anywhere in world. *******************************************************************************/ // Example program #include <iostream> #include <string> #include <vector> //note : this function add results of duplicates lines template< class PValues, class PResults > size_t remove_duplicates_rows_impl(PValues first_v, PResults first_r, size_t rows, size_t cols) { auto first_v_cp = first_v; auto last_v = first_v + rows; for(auto [i, j] = std::tuple{first_v, first_r}; i != last_v; ++i, ++j) { if(equal(first_v, last_v, cols, rows, 1)) { if(first_v!=i) //self move assignement -> undefined behaviour { for(size_t c=0; c<cols; ++c) { *(first_v + c*rows) = std::move(*(i + c*rows)); } *(first_r) = std::move(*j); } ++first_v; ++first_r; } else { *(j+1) += *j; } } // Shift values shift(first_v_cp, first_v, rows, cols); return rows; } template< class PValues > inline PValues shift(PValues first, PValues current, size_t& rows, size_t cols) { size_t tmp = static_cast<size_t>(current - first); // set the new size of the columns if(tmp==rows) return first + cols*rows; // nothing to do here // We shift for(size_t s=1;s<cols;++s) for(size_t ns=0; ns<tmp; ++ns) { *current++ = std::move(*(first + s*rows + ns)); } rows = tmp; return current; } int main() { std::vector<std::string> vec = {"1","1","1","2","2","2","3","8","8", "5","5","2","5","5","5","6","8","8", "3","3","3","4","4","3","9","8","8"}; std::vector<double> nbs = {1,2,3,4,5,6,7,8,9}; for(const auto& v : vec) std::cout << v << " " << std::endl; for(const auto& v : nbs) std::cout << v << " " << std::endl; }
// Example program #include <iostream> #include <string> #include <vector> #include <tuple> template<class PValues> inline bool equal(PValues it, PValues last, const std::vector<size_t>& cols_idx, size_t rows, size_t offset) { if(std::distance(it,last)<offset) return false; for(size_t s=0; s<cols_idx.size(); ++s) { auto p = it + cols_idx[s]*rows; if(*p != *(p + offset)) return false; } return true; }; template<class PValues> inline bool equal(PValues it, PValues last, size_t cols, size_t rows, size_t offset) { if(std::distance(it,last)<offset) return false; for(size_t c=0; c<cols; ++c) { auto p = it + c*rows; if(*p != *(p + offset)) return false; } return true; }; template< class PValues > inline PValues shift(PValues first, PValues current, size_t& rows, size_t cols) { size_t tmp = static_cast<size_t>(current - first); // set the new size of the columns if(tmp==rows) return first + cols*rows; // nothing to do here // We shift for(size_t s=1;s<cols;++s) for(size_t ns=0; ns<tmp; ++ns) { *current++ = std::move(*(first + s*rows + ns)); } rows = tmp; return current; } //note : this function add results of duplicates lines template< class PValues, class PResults > size_t remove_duplicates_rows_impl(PValues first_v, PResults first_r, size_t rows, size_t cols) { auto first_v_cp = first_v; auto last_v = first_v + rows; for(auto [i, j] = std::tuple{first_v, first_r}; i != last_v; ++i, ++j) { if(equal(first_v, last_v, cols, rows, 1)) { if(first_v!=i) //self move assignement -> undefined behaviour { for(size_t c=0; c<cols; ++c) { *(first_v + c*rows) = std::move(*(i + c*rows)); } *(first_r) = std::move(*j); } ++first_v; ++first_r; } else { *(j+1) += *j; } } // Shift values shift(first_v_cp, first_v, rows, cols); return rows; } int main() { std::vector<std::string> vec = {"1","1","1","2","2","2","3","8","8", "5","5","2","5","5","5","6","8","8", "3","3","3","4","4","3","9","8","8"}; std::vector<double> nbs = {1,2,3,4,5,6,7,8,9}; remove_duplicates_rows_impl(vec.begin(), nbs.begin(), 9, 3); for(const auto& v : vec) std::cout << v << " " << std::endl; for(const auto& v : nbs) std::cout << v << " " << std::endl; }

Compiling Program...

Command line arguments:
Standard Input: Interactive Console Text
×

                

                

Program is not being debugged. Click "Debug" button to start program in debug mode.

#FunctionFile:Line
VariableValue
RegisterValue
ExpressionValue