容器array
为什么要把array封装为容器,放在STL中?
因为封装容器array后,就可以使用STL标准迭代器、算法、仿函数等,适应STL生态
一、array使用
#include <array>
#include <iostream>
#include <ctime>
#include <cstdlib> //qsort, bsearch,
#define ASIZE 500000
long get_a_target_long() //输入一个数
{
long target = 0;
cout << "target (0~)" << RAND_MAX << ")" << endl;
cin >> target;
return target;
}
int compareLongs(const void* p1, const void* p2)
{
return (*(long*)p1) - (*(long*)p2);
}
namespace jj01
{
void test_array()
{
cout<<"\ntest_array().........\n";
array<long, ASIZE> array;
colok_t timestart = clock();
for (long i = 0; i < ASIZE; ++i)
{
c[i] = rand();
}
cout << "milli-seconds:" << (clock()-timestart) << endl;
cout << "array.size() = " << array.size() << endl;
cout << "array.front() = " << array.front() << endl;
cout << "array.back() = " << array.back() << endl;
cout << "array.data() = " << array.data() << endl;
long target = get_a_target_long();
timestart = clock();
qsort(c.data(), ASIZE, sizeof(long), compareLongs); //排序
long* pItem = (long*)bsearch(&target, (c.data()), ASIZE, sizeof(long), compareLongs);
cout << "qsort()+bsearch(), milli-seconds: " << (clock()-timestart) <<endl;
if (pItem != NULL)
{
cout << "fount, << *pItem << endl;
}
else
{
cout << "not fount!" << endl;
}
}
}
二、array源码解析
template<class _Tp, std::size_t _Nm>
struct array{
typedef _Tp value_type;
typedef _Tp* pointer;
typedef value_type* iterator; //迭代器是指针 T*
//成员
value_type _M_instance[_Nm ? _Nm : 1];
//函数
iterator begin(){ return iterator(&_M_instance[0]); }
iterator end(){ return iterator(&_M_instance[_Nm]);}
};