zoukankan      html  css  js  c++  java
  • c++ vector用法和迭代器

    1.在c++中,vector是一个十分有用的容器,下面对这个容器做一下总结。

    (1)头文件#include<vector>.

    (2)创建vector对象,vector<int> vec;

    (3)初始化vector对象,vector<T> v1;  类型为T的默认初始化

                                       vector<T> v2(n,val); v2中包含了n个类型为T值为val的元素

                                       vector<T> v3{  a, b, c ...  }; 列表初始化 

     注:vector<int> v1{10,1}; v1有两个 元素 0和1

            vector<int> v2(10,1); v2有十个元素,每个都是1

    (4)尾部插入元素:vec.push_back(a);

    (5)插入元素:    vec.insert(vec.begin()+i,a);在第i+1个元素前面插入a;

    (6)使用下标访问元素,cout<<vec[0]<<endl;但是不能直接赋值,vec[0]=1//!!严重错误。

    (7)删除元素:    vec.erase(vec.begin()+2);删除第3个元素

                             vec.erase(vec.begin()+i,vec.end()+j);删除区间[i,j-1];区间从0开始

    (8)向量大小:      vec.size();

    (9)清空:             vec.clear();

     

    (10)使用sort排序:需要头文件#include<algorithm>,

          sort(vec.begin(),vec.end());(默认是按升序排列,即从小到大).

          可以通过重写排序比较函数按照降序比较,如下:

          bool Comp(const int &a,const int &b)
       {
        return a>b;
       }
        调用时:sort(vec.begin(),vec.end(),Comp),这样就降序排序。


    2. 迭代器比下标运算符更通用,所有标准库容器都可以使用迭代器。(string对象不属于容器类型,但同样支持)

    (1) 迭代器访问元素

     使用begin成员返回指向第一个元素,end指向尾元素的下一位置。(即并不存在的尾后元素)

    string s("some string");
    for(auto it=s.begin();it!=s.end()&&!isspace(*it);++it)
      *it=toupper(*it)//当前字符改成大写形式

    (2) 解引用获得所指对象  

      (*it).empty; //检查所指字符串是否为空

    (3) 箭头运算符->

      it->empty();

    (4)使用迭代器的循环体,不能向迭代器所属容器添加元素。(终止条件失效)

    (5)使用迭代器进行二分搜索

     

    #include <vector>
    #include <iostream>
    using namespace std;
    int main()
    {
    	vector<int> text{1,2,3,4,5,6,7,8,9,10};
    	int sought;
    	cin>>sought;
    	//迭代器二分搜索,text必须有序
    	auto beg=text.begin(),end=text.end();
    	auto mid=beg+(end-beg)/2;
    	while(mid!=end&&*mid!=sought){
    		if(sought<*mid)
    			end=mid;
    		else
    			beg=mid+1;
    		mid=beg+(end-beg)/2;
    	}
    	if(mid==end)
    		cout<<"not found.
    ";
    	else
    		cout<<*mid<<" is found.
    ";
    	return 0;
    }


  • 相关阅读:
    我的Android学习路线(二)
    利用python3.x实现小爬虫下载贴吧内图片
    我的Android学习路线(一)
    根网科技面试题
    sql语句的执行顺序
    英文面试常见问题汇总
    关于oracle、sqlserver、mysql查询前N条数据的实现
    LinqToSql(一)
    关于一些概念的问题,命名空间,程序集,解决方案,项目
    索引器
  • 原文地址:https://www.cnblogs.com/yueshangzuo/p/5889907.html
Copyright © 2011-2022 走看看