预测:底层C函数肯定比stl算法快
结果:少量数据底层快,大数据以上则stl对vector的处理可能更好
C/C++:
1 #include <iostream> 2 #include <vector> 3 #include <functional> 4 #include <algorithm> 5 #include <string> 6 7 template<typename T> 8 void Display(const T &rhs) 9 { 10 for (auto iter = rhs.begin(); iter != rhs.end();) 11 { 12 printf("%c\n", *iter++); 13 } 14 } 15 16 17 int main() 18 { 19 std::vector<char> vec1_; 20 char ch = 'a'; 21 for (int i = 0; i < 50000000; i++) 22 { 23 vec1_.push_back(ch); 24 } 25 26 27 std::clock_t start, end; 28 29 start = std::clock(); 30 std::vector<char> vec2_(vec1_.begin(), vec1_.end()); 31 end = std::clock(); 32 33 std::cout << "迭代器范围初始化: " << ((double)(end-start)/CLOCKS_PER_SEC) << std::endl; 34 // Display(vec2_); 35 36 37 start = std::clock(); 38 std::vector<char> vec3_; 39 vec3_.resize(vec1_.size()); 40 std::copy(vec1_.begin(), vec1_.end(), vec3_.begin()); 41 end = std::clock(); 42 43 std::cout << "std::copy: " << ((double)(end-start)/CLOCKS_PER_SEC) << std::endl; 44 // Display(vec3_); 45 46 47 start = std::clock(); 48 std::vector<char> vec4_; 49 vec4_.resize(vec1_.size()); 50 std::memcpy(&vec4_[0], &vec1_[0], vec1_.size()); 51 end = std::clock(); 52 std::cout << "memcpy: " << ((double)(end-start)/CLOCKS_PER_SEC) << std::endl; 53 //Display(vec4_); 54 55 56 return 0; 57 }
注意点:memcpy 只能按字节拷贝,所以选择char进行,实际意义不明显...