建立索引表----使用vector容器

vector是C++标准模板库中的一种容器在广义上可以理解为增强的数组

vector的优点在于:能够根据条件的需要自动的调整自身容量的大小,并且提供了一些方法对自身操作

头文件 #include <vector>

初始化 

①vector <string> vec;//初始化大小为自动调整,类型为string的向量

②vector <int> vec(10);//初始化大小为10(vec.size()=10),类型为int的向量

③vector <int> vec(10,0);//初始化大小为10(vec.size()=10),初值为0的int类型的向量

④vector <int> veb(vec);//用向量vec初始化veb

⑤vector <int> veb(vec.begin(),vec.end()+3);//用向量vec从0开始的前三项vec[0]、vec[1]、vec[2]初始化向量veb;

 

除此之外还可以用数组来初始化向量

 

int array[] ={0,1,2,3,4,5,6,7,8,9};

vector <int> vec(array,array+5);//将数组array的前5个元素作为向量a的初值;

 

因为里面参数array是 int * 类型的,所以代表的是地址,所以还有一种表示方法

vector <int> vec(&array[1],&array[4]);//用数组从array[1]到array[4]范围内的元素初始化向量vector;

一些基本操作:

    1>. a.size()                 //获取向量中的元素个数
    2>. a.empty()                //判断向量是否为空
    3>. a.clear()                //清空向量中的元素
    4>. 复制  a = b ;            //将b向量复制到a向量中
    5>. 比较 保持 ==、!=、>、>=、<、<= 的惯有含义 ;
        如: a == b ;    //a向量与b向量比较, 相等则返回1
    6>. 插入 - insert
        ①、 a.insert(a.begin(), 1000);            //将1000插入到向量a的起始位置前   
        ②、 a.insert(a.begin(), 3, 1000) ;        //将1000分别插入到向量元素位置的0-2处(共3个元素) 
        ③、 vector<int> a(5, 1) ;
            vector<int> b(10) ;
            b.insert(b.begin(), a.begin(), a.end()) ;        //将a.begin(), a.end()之间的全部元素插入到b.begin()前
    7>. 删除 - erase
        ①、 b.erase(b.begin()) ;                     //将起始位置的元素删除
        ②、 b.erase(b.begin(), b.begin()+3) ;        //将(b.begin(), b.begin()+3)之间的元素删除
        交换 - swap
      8>. b.swap(a) ;            //a向量与b向量进行交换

SMU Problem1386 基于索引表的分块查找

#include <iostream>
#include <string>
#include <vector>
using namespace std ;
int main()
{
	int i,n,j ;
	string str[] = {"abstract","assert","boolean","break","byte","case","catch",
        "char","class","continue","default","do","double","else","extends","false","final","finally",
        "float","for","if","implements","import","instanceof","int","interface","long","native","new",
        "null","package","private","protected","public","return","short","static","super","switch",
        "synchronized","this","throw","throws","transient","true","try","void","volatile","while"} ;
	vector<string> vec[26] ;//以26字母为分块  因为都是小写字母  如果 有大写  则为48
	for( i = 0 ; i < 49 ; i++)//吧题目所给的字母分类  分成a,b,c,d。。等等的一类
	{
		vec[str[i].at(0)-'a'].push_back(str[i]) ;
	}
	/*for(i = 0 ; i < vec[0].size() ;i++)
	{
		cout<<vec[0][i]<<endl ;
	}*/
	scanf("%d",&n) ;
	for(i = 0 ; i < n;i++)
	{
		string ss ;
		cin>>ss ;
		for(j = 0 ; j < vec[ss[0]-'a'].size() ;j++)
		{
			if(ss == vec[ss[0]-'a'][j])
			{
				cout<<"in"<<endl ;
				break ;
			}
		}
		if(j ==  vec[ss[0]-'a'].size())
			cout<<"out"<<endl ;
	}
	return 0 ;
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值