#include #include #include #include namespace my{ template void fill_impl(I first, I last, const T& val, const std::integral_constant&){ while(first != last){ *first = val; ++first; } } template void fill_impl(T* first, T* last, const T& val, const std::true_type&){ std::memset(first, val, last-first); } template inline void fill(I first, I last, const T& val){ typedef std::integral_constant ::value && (sizeof(T) == 1)> boolType; fill_impl(first, last, val, boolType()); } } const int arraySize = 100000000; char charArray1[arraySize]= {0,}; char charArray2[arraySize]= {0,}; int main(){ std::cout << std::endl; auto begin= std::chrono::system_clock::now(); my::fill(charArray1, charArray1 + arraySize,1); auto last= std::chrono::system_clock::now() - begin; std::cout << "charArray1: " << std::chrono::duration(last).count() << " seconds" << std::endl; begin= std::chrono::system_clock::now(); my::fill(charArray2, charArray2 + arraySize, static_cast(1)); last= std::chrono::system_clock::now() - begin; std::cout << "charArray2: " << std::chrono::duration(last).count() << " seconds" << std::endl; std::cout << std::endl; }