c++ STL 003 容器分类测试

容器分类

在这里插入图片描述

  1. array
  2. vector
  3. qeque
  4. list
  5. forward-list
  6. set/multiset
  7. map/multimap
  8. unordered set/multiset
  9. unordered map/multimap
  10. hashtable
容器测试(测试创建时间和排序时间)
#include <iostream>
#include <array>
#include <ctime>
#include <cstdlib>  //qsort .qsearch , NULL
#include <vector>
#include <list>
#include <forward_list>
#include <deque>
#include <stack>
#include <queue>
#include <set>
#include <map>

using namespace std;

//设置数据元素长度
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 << "):";
    cin >> target;
    /**
     * C 库函数 int snprintf(char *str, size_t size, const char *format, ...) 设将可变参数(...)按照 format 格式化成字符串,并将字符串复制到 str 中,size 为要写入的字符的最大数目,超过 size 会被截断。
     声明
        下面是 snprintf() 函数的声明。
        int snprintf ( char * str, size_t size, const char * format, ... );
        参数
        str -- 目标字符串。
        size -- 拷贝字节数(Bytes)。
        format -- 格式化成字符串。
        ... -- 可变参数。
        返回值
        (1) 如果格式化后的字符串长度小于等于 size,则会把字符串全部复制到 str 中,并给其后添加一个字符串结束符 \0;
        (2) 如果格式化后的字符串长度大于 size,超过 size 的部分会被截断,只将其中的 (size-1) 个字符复制到 str 中,
             并给其后添加一个字符串结束符 \0,返回值为欲写入的字符串长度。

     */
    snprintf(buf,10,"%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;
    }
}


int main() {
    srand(time(NULL)); // 随机数种子设置
    const long ASIZE =  1000000;
    array<long,ASIZE> c; //数组
    clock_t timeStart = clock();  //c函数clock为cpu时间,不是毫秒或者别的
    for (long i = 0; i < ASIZE; ++i) {
        c[i] = rand();
    }
    cout << "array创建数据所用CPU时间:" << (clock() - timeStart) << endl;
    cout << "array 尺寸:" << c.size() << endl;
    cout << "array 首元素:" << c.front() << endl;
    cout << "array 末元素:" << c.back() << endl;
    cout << "array data(内存起点地址):" <<  c.data() << endl;

    //long target = get_a_target_long();
    timeStart = clock();
    qsort(c.data(),ASIZE, sizeof(long),compareLongs); //数据进行排序
    cout << "qsort 所用的cpu时间:"  << (clock() - timeStart) << endl;

//--------------------------------vector

    vector<string> vc; //向量
    timeStart = clock();
    char buf[10];
    for (long j = 0; j < ASIZE; ++j) {
        try {
            snprintf(buf,10,"%d",rand());
            vc.push_back(string(buf));
        }catch (exception& p){
         cout << "异常信息"  <<endl;
         abort(); //发生异常进行退出
        }
    }
    cout << "vector创建数据所用CPU时间:" << (clock() - timeStart) << endl;
    cout << "vector 尺寸:" << vc.size() << endl;
    cout << "vector 容量:" <<  vc.capacity() << endl;
    cout << "vector 首元素:" << vc.front() << endl;
    cout << "vector 末元素:" << vc.back() << endl;
    cout << "vector data(内存起点地址):" <<  vc.data() << endl;

    timeStart = clock();
    sort(vc.begin(),vc.end()); //数据进行排序
    cout << " vector sort 所用的cpu时间:"  << (clock() - timeStart) << endl;


//-------------------------------list


    list<string> vl; //list
    timeStart = clock();
    for (long j = 0; j < ASIZE; ++j) {
        try {
            snprintf(buf,10,"%d",rand());
            vl.push_back(string(buf));
        }catch (exception& p){
            cout << "异常信息"  <<endl;
            abort(); //发生异常进行退出
        }
    }
    cout << "list创建数据所用CPU时间:" << (clock() - timeStart) << endl;
    cout << "list 尺寸:" << vl.size() << endl;
    cout << "list 可创建元素数:" <<  vl.max_size() << endl;
    cout << "list 首元素:" << vl.front() << endl;
    cout << "list 末元素:" << vl.back() << endl;

    timeStart = clock();
    vl.sort(); //数据进行排序
    cout << "list sort 所用的cpu时间:"  << (clock() - timeStart) << endl;

//--------------------------------forward_list

    forward_list<string> vfl; //list
    timeStart = clock();
    for (long j = 0; j < ASIZE; ++j) {
        try {
            snprintf(buf,10,"%d",rand());
            vfl.push_front(string(buf));
        }catch (exception& p){
            cout << "异常信息"  <<endl;
            abort(); //发生异常进行退出
        }
    }
    cout << "forward_list创建数据所用CPU时间:" << (clock() - timeStart) << endl;
    cout << "forward_list 可创建元素数:" <<  vfl.max_size() << endl;
    cout << "forward_list 首元素:" << vfl.front() << endl;


    timeStart = clock();
    vfl.sort(); //数据进行排序
    cout << "forward_list sort 所用的cpu时间:"  << (clock() - timeStart) << endl;


 //----------------------------------deque

    deque<string> vde;
    timeStart = clock();
    for (long j = 0; j < ASIZE; ++j) {
        try {
            snprintf(buf,10,"%d",rand());
            vde.push_back(string(buf));
        }catch (exception& p){
            cout << "异常信息"  <<endl;
            abort(); //发生异常进行退出
        }
    }
    cout << "deque创建数据所用CPU时间:" << (clock() - timeStart) << endl;
    cout << "deque 可创建元素数:" <<  vde.max_size() << endl;
    cout << "deque 首元素:" << vde.front() << endl;
    cout << "deque 末元素:" << vde.back() << endl;

    timeStart = clock();
    sort(vde.begin(),vde.end()); //数据进行排序
    cout << "deque sort 所用的cpu时间:"  << (clock() - timeStart) << endl;

//-----------------------------stack, 先进后出


    stack<string> sta;

    timeStart = clock();
    for (long j = 0; j < ASIZE; ++j) {
        try {
            snprintf(buf,10,"%d",rand());
            sta.push(string(buf));
        }catch (exception& p){
            cout << "异常信息"  <<endl;
            abort(); //发生异常进行退出
        }
    }
    cout << "stack创建数据所用CPU时间:" << (clock() - timeStart) << endl;
    cout << "stack 元素数:" <<  sta.size() << endl;
    cout << "stack top元素:" << sta.top() << endl;

    timeStart = clock();
    //不可排序
    cout << "stack sort 所用的cpu时间:"  << (clock() - timeStart) << endl;



 //-----------------------queue  先进先出



    queue<string> que;

    timeStart = clock();
    for (long j = 0; j < ASIZE; ++j) {
        try {
            snprintf(buf,10,"%d",rand());
            que.push(string(buf));
        }catch (exception& p){
            cout << "异常信息"  <<endl;
            abort(); //发生异常进行退出
        }
    }
    cout << "queue创建数据所用CPU时间:" << (clock() - timeStart) << endl;
    cout << "queue 元素数:" <<  que.size() << endl;
    cout << "queue 首元素:" << que.front() << endl;
    cout << "queue 末元素:" << que.back() << endl;

    timeStart = clock();
    //不可排序
    cout << "queue sort 所用的cpu时间:"  << (clock() - timeStart) << endl;


 //-------------------------- multiset


  multiset<string> ms;
    timeStart = clock();
    for (long j = 0; j < ASIZE; ++j) {
        try {
            snprintf(buf,10,"%d",rand());
            ms.insert(string(buf));
        }catch (exception& p){
            cout << "异常信息"  <<endl;
            abort(); //发生异常进行退出
        }
    }
    cout << "multiset创建数据所用CPU时间:" << (clock() - timeStart) << endl;
    cout << "multiset 元素数:" <<  ms.size() << endl;
    cout << "multiset 可创建元素数:" << ms.max_size() << endl;

    timeStart = clock();
    //不可排序
    cout << "multiset sort 所用的cpu时间:"  << (clock() - timeStart) << endl;

    //-------------------------- multimap


    multimap<long,string> mm;
    timeStart = clock();
    for (long j = 0; j < ASIZE; ++j) {
        try {
            snprintf(buf,10,"%d",rand());
           mm.insert(pair<long,string>(j,buf));
        }catch (exception& p){
            cout << "异常信息"  <<endl;
            abort(); //发生异常进行退出
        }
    }
    cout << "multimap创建数据所用CPU时间:" << (clock() - timeStart) << endl;
    cout << "multimap 元素数:" <<  mm.size() << endl;
    cout << "multimap 可创建元素数:" << mm.max_size() << endl;

    timeStart = clock();
    //不可排序
    cout << "multimap sort 所用的cpu时间:"  << (clock() - timeStart) << endl;



    return 0;
}

/**
array创建数据所用CPU时间:10371
array 尺寸:1000000
array 首元素:562258177
array 末元素:1301214724
array data(内存起点地址):0x7ffeec0f3840
qsort 所用的cpu时间:189732
vector创建数据所用CPU时间:302288
vector 尺寸:1000000
vector 容量:1048576
vector 首元素:168988886
vector 末元素:712492055
vector data(内存起点地址):0x7fe2e5680000
 vector sort 所用的cpu时间:2795980
list创建数据所用CPU时间:452298
list 尺寸:1000000
list 可创建元素数:461168601842738790
list 首元素:485152713
list 末元素:439646322
list sort 所用的cpu时间:3476225
forward_list创建数据所用CPU时间:401459
forward_list 可创建元素数:576460752303423487
forward_list 首元素:162847556
forward_list sort 所用的cpu时间:2247487
deque创建数据所用CPU时间:200017
deque 可创建元素数:768614336404564650
deque 首元素:109756747
deque 末元素:932501466
deque sort 所用的cpu时间:2526476
stack创建数据所用CPU时间:203356
stack 元素数:1000000
stack top元素:322908881
stack sort 所用的cpu时间:1
queue创建数据所用CPU时间:213360
queue 元素数:1000000
queue 首元素:438386998
queue 末元素:128823187
queue sort 所用的cpu时间:1
multiset创建数据所用CPU时间:2938287
multiset 元素数:1000000
multiset 可创建元素数:329406144173384850
multiset sort 所用的cpu时间:2
multimap创建数据所用CPU时间:847746
multimap 元素数:1000000
multimap 可创建元素数:288230376151711743
multimap sort 所用的cpu时间:1

*/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值