zoukankan      html  css  js  c++  java
  • Geekband C++面向对象高级程序设计-第六周课程3

    #前言

      使用namespace,

      #使用到变量声明时在定义避免集中存放,并且使用缩排。

    #Vector容器1

    #include <iostream>
    #include <vector>
    #include <stdexcept> //exception
    #include <cstdlib> //abort
    #include <cstdio> //snprintf
    #include <ctime>
    
    using namespace std;
     
    int main(){
        const int value=1000000;
        
        vector<string> c;
        char buf[10];
        
        clock_t timeStart = clock();
        
        for(long i=0;i<value;i++){
            try{
                snprintf(buf,10,"%d",rand());
                c.push_back(string(buf));    
            }
            catch(exception& p){
                cout << "i=" <<i<<"    "<<p.what()<<endl;
                abort();
            }
        }
        cout << "milli-seconds: " << (clock()-timeStart) <<endl;
        cout << "vector.size()= " <<c.size()<<endl;
        cout << "vector.front()= " << c.front()<<endl;
        cout << "vector.back()= " <<c.back()<<endl;
        cout << "vector.data()= " <<c.data()<<endl;
        cout << "vector.capacity()= "<<c.capacity()<<endl;
        return 0;
    }

      #补充说明:

    1. (vector).push_back;vector容器是前闭后开那么放入是在后面放入。试想若可以从前方放入,那么需要每个元素后移位数据庞大消耗时间效率非常高。
    2. vector最初没有给定容器空间大小,当数据增加vector的容量是以2倍的容量扩容。
    3. .size()是容器内存放数据的个数,capacity()是容器申请空间的大小。
    4. 发生异常使用abort()函数退出程序。
    5. vector.front()得到起始元素,vector.back()得到最末元素。
    6. vector.data()得到连续元素的起始地址。

    #Vector容器2

     

    string target = 123456;
    timeStart = clock();
    auto pItem = ::find(c.begin(),c.end(),target); 
    cout << "::find(),milli-seconds: " << (clock()-timestart) <<endl;
    if(pItem!=c.end()){
        cout << "found, " << *pItem <<endl;
    }else { cout << "not fount! " << endl;
    }

     

      #补充说明

    1. ::find() 模板函数。
    2. !=end() 没有查找到末尾说明查找成功。
    3. find返回iterator,其中返回类型用auto代替
    4. *pItem解参考

    #Vector容器3

    string target = "123456";
    timeStart = clock();
    sort(c.begin(),c.end());
    string* pItem = (string*)bsearch(&target,(c.data()),c.size(),sizeof(string),compareStrings);
    cout << "sort()+bsearch(),milli-seconds:"<<(clock()-timeStart)<<endl;
    if(pItem!=NULL){
        cout << "found, " <<*pItem <<endl;
    }else{
        cout << "not found" <<endl;
    }

       #补充代码

    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;
    } 

       #补充说明

    1. 使用排序而后查找元素,而后使用二分查找。
    2. 相比较第一种,直观感觉二分查找会比较快速,但是二分查找并不是通常意义上都是如此快速的。其中排序所占用时间消耗同样很大。

     

  • 相关阅读:
    利用 pandas库读取excel表格数据
    Spark学习笔记3——RDD(下)
    Spark学习笔记2——RDD(上)
    Spark学习笔记1——第一个Spark程序:单词数统计
    Spark学习笔记0——简单了解和技术架构
    java标识符和关键字
    数据库事务ACID特性(原子性、一致性、隔离性、持久性)
    大数据系统的运行
    虚拟机和hadoop
    大数据基础1
  • 原文地址:https://www.cnblogs.com/SKY-ZL/p/8445715.html
Copyright © 2011-2022 走看看