array特点:连续空间,空间大小在定义的时候就确定了,你要多大就是多大,数组的开端和末尾是没有办法去控容的。
参考代码如下:
#include<iostream>
#include<array>
#include<ctime>
#include<cstdlib>
#include<stdexcept>
using std::cin;
using std::cout;
using std::endl;
using std::string;
using std::array;
using std::exception;
long get_a_target_long()
{
long target = 0;
cout << "target (0~" << RAND_MAX << "):";
cin >> target;
return target;
}
string get_a_target_string()
{
long target = 0;
char buf[10];
cout << "target (0~" << RAND_MAX << "):" << endl;
cin >> target;
sprintf_s(buf, "%d", target);
return string(buf);
}
int compareLongs(const void* a, const void* b)
{
return *(long*)a - *(long*)b;
}
int compareStrings(const void*a, const void*b)
{
if (*(string*)a > *(string*)b)
return 1;
else if (*(string*)a < *(string*)b)
return -1;
else
return 0;
}
namespace stl_array
{
void test_array()
{
cout << "test_array()............." << endl;
array<long, 50000> c;
clock_t timeStart = clock();
for (long i = 0; i < ASIZE; ++i)
{
try
{
c[i] = rand();
}
catch (exception& p)
{
cout << "i=" << i << " " << p.what() << endl;
abort();
}
}
cout << "milli-seconds:" << (clock() - timeStart) << endl;
cout << "array.size():" << c.size() << endl;
cout << "array.front():" << c.front() << endl;
cout << "array.back():" << c.back() << endl;
cout << "array.data():" << c.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 << "found," << *pItem << endl;
else
cout << "not found" << endl;
}
}