从这篇博文起,将尝试使用C++11来写常用算法与数据结构。
本篇博文以最简单的顺序查找作为系列博文的起点,并作约定如下:
1,变量名 : varList ; 函数名 : SequentialFind ;
2,尽量描写算法本身,因而均不含模板,数据类型均为int;
3,所有代码均在同一个cpp中;
4,代码均在 vs2013 与 g++ 4.8.2 中编译通过;
5,g++编译命令:g++ -std=c++11 sequential_find.cpp 。
顺序查找没什么好说的,这里主要看看C++11的lambda,auto新语义。
时间复杂度:O(n)
空间复杂度:O(1)
show me the code !
// #if __cplusplus < 201103L // #error "must be compiled under c++11 support platform!!!" // #endif #include <iostream> #include <algorithm> #include <iterator> #include <cassert> using namespace std; int SequentialFind(const int varList[], const int size, const int target) { if (!varList || size < 0) { return -1; } int index = -1; for (int i = 0; i < size;i++) { if (varList[i] == target) { index = i; break; } } return index; } void test() { //case counter int testCase = 0; //find function object auto findFunc = SequentialFind; //show case result lambda function auto showFunc = [&testCase](){cout << "case[" << testCase++ << "] ok... "<<endl; }; cout << "test begin : " << endl << endl; //case empty list { assert(-1 == findFunc(nullptr, 0, 0)); showFunc(); } //case wrong list size { const int testList[] = { 11,5,7,9,3, 2, 3 ,4,1,-2}; assert(-1 == findFunc(testList, 0, 0)); showFunc(); } //case not found { const int testList[] = { 11, 5, 7, 9, 3, 2, 3, 4, 1, -2 }; const int size = sizeof(testList) / sizeof(int); const int target = -33; assert(-1 == findFunc(testList, 0, 0)); showFunc(); } //case found at begin position { const int testList[] = { 11, 5, 7, 9, 3, 2, 3, 4, 1, -2 }; const int size = sizeof(testList) / sizeof(int); const int target = 11; assert(0 == findFunc(testList, size, target)); showFunc(); } //case found at random position { const int testList[] = { 11, 5, 7, 9, 3, 2, 3, 4, 1, -2 }; const int size = sizeof(testList) / sizeof(int); const int target = 9; assert(3 == findFunc(testList, size, target)); showFunc(); } //case found at end position { const int testList[] = { 11, 5, 7, 9, 3, 2, 3, 4, 1, -2 }; const int size = sizeof(testList) / sizeof(int); const int target = -2; assert(size - 1 == findFunc(testList, size, target)); showFunc(); } cout <<endl<< "test done ! " << endl << endl; } int main(int argc, char* argv[]) { test(); return 0; }