各种数组迭代器方法,属性

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
/*#include<iostream>
#include<set>
using namespace std;
struct Info
{
string name;
float score;
bool operator<(const Info &a) const
{
//按score由大到小排列.如果要由小到大排列,使用">"号即可
c.erase(pos)
c.erase(beg,end)
删除pos位置的数据,传回下一个数据的位置。
删除[beg,end)区间的数据,传回下一个数据的位置。
c.front()
传回第一个数据。
get_allocator
使用构造函数返回一个拷贝。
例子:
/*int main()
{
string s="abc123456";
s.replace(3,3,"good");//从第三个开始,将连续的3个字符替换为"good"
return 0;
}
*/结果:abcgood456
搜索string对象元素或字串
变量名.find('要找的内容,可以使字符或字符串')
{
cout<<(*it).first<<":"<<(*it).second<<endl;
}
输出结构为:
Andy:98
Jack:98.5
注:程序编译会产生"warning C4786"的警告,"4786"是标记符超长警告的代号
可以再头文件包含代码前使用"#pragma warning(disable)"宏语句,强制编译器忽律该警告
找第一个这个内容所在的位置(char,用单引号界定,字符串用双引号),返回所在位置的下标识从0开始计数,查不到,返回4294967295
可以很多函数重载
string对象的比较
变量名.compare("对比的内容"),如果string容器里的值比对方打,返回1,小-1,相等0
//比的原理
按字典顺序比较两个字符串。该比较基于字符串中各个字符的 Unicode 值。
c.resize(num) 重新指定 Nhomakorabea列的长度。
c.reserve()
保留适当的容量。
c.size()
返回容器中实际数据的个数。
c1.swap(c2)
swap(c1,c2)
将c1和c2元素互换。同上操作。
· operator[]
此警告对程序的正确性和运行并无影响
2.删除元素
erase()方法,在()中输入键值
3.元素的搜索
*重复元素不会插入
2.删除set对象的元素
变量名.clera()方法 全部清空
变量名.erase()方法 在()中直接输入删除数值
3.统计set容器中的数量
s.size();
4.使用find()方法对集合进行搜索,如找到,返回迭代器位置,未找到,返回集合最后一个元素后面的一个位置,即end();
return 0;
}*/
set集合容器(multiset多重集合容器)
头文件:#include<set>(包含了set和multiset两种容器的定义)
定义:set<类型> 名称 例如:set<int> s;
1.插入用insert(),插入的具体规则在默认的比较规则下,是按元素值由小到大插入,可以自己制定排序规则
set<int,myComp>::iterator it;
for(it=s.begin();it!=s.end();it++)
{
cout<<*it<<" ";
}
cout<<endl;
return 0;
}*/
2.如果元素师结构体,那么,可以直接把比较函数编写在结构体内
1.定义:map<类型,类型> 变量名;
例:
map<string,float> m;
m["Jack"]=98.5;
m["Andy"]=98.0;
map<string,float>::iterator it;
for(it=m.begin();it!=m.end();it++)
c.max_size()
返回容器中最大数据的数量。
c.pop_back()
删除最后一个数据。
c.push_back(elem)
在尾部加入一个数据。
c.rbegin()
传回一个逆向队列的第一个数据。
c.rend()
传回一个逆向队列的最后一个数据的下一个位置。
int main()
{
string s;
char ss[5000];
scanf("%s",&ss);
s=ss;
cout<<s<<endl;
return 0;
}
*/
2.s="可以是字符或字符串" 直接赋值
3.s=s+'可以是字符或字符串';给string 对象尾部添加一个字符(char)或采用append()方法
vector
头文件:#include <vector>
定义:vector<类型> 名称
如:vector<int> v;
vector<int> v(10,8.6)
定义了V向量容器,共有10个元素,每个元素值为8.6
vector 容器下表是从0开始,用push_back()方法从尾部扩张元素
string对象与sscanf函数
/*int main()
{
string s1,s2,s3;
char sa[100],sb[100],sc[100];
//将字符串分离成字串,分隔符为空格
sscanf("abc 123 pc","%s %s %s",sa,sb,sc);
s1=sa;
return a.score<score;
}
};
int main()
{
//定义类型为Info结构体的集合对象s
set<Info> s;
Info info;
="Jack";
info.score=80.5;
s.insert(info);
返回容器中指定位置的一个引用。
string字符系列容器
头文件:#include <string>
定义:string 变量名
如:string s
用printf输出字符串对象,要采用 变量名.c_str()方法
给string容器赋值
1.在C语言中不支持string对象,需:
/*
例:n=ms.erase(123);cout<<n;则统计出删除元素的总数
map映照容器
map映照容器的元素数据时由一个键值和一个映照数据组成的,键值与映照数据之间具有一一映照的关系,不允许重复键值
在没有定义排序规则的情况下,是按键值进行由小到大排列的
头文件:#include<map>
结果:6
5.自定义比较函数
编写比较函数有两种方法:
1.如果元素不是结构体,那么可以编写比较函数
/* #include<iostream>
#include<set>
using namespace std;
struct myComp
{
bool operator()(const int &a,const int &b)
="Andy";
info.score=100.5;
s.insert(info);
="Anna";
info.score=60.5;
s.insert(info);
set<Info>::iterator it;
for(it=s.begin();it!=s.end();it++)
{
cout<<(*it).name<<":"<<(*it).score<<endl;
}
return 0;
}*/
multiset多重集合容器
用法与set一样,唯一不同multiset允许多键值插入,而set不允许
multiset的erase()方法,删除的是()中内容所在容器中的所有值
s2=sb;
s3=sc;
cout<<s1<<" "<<s2<<" "<<s3<<endl;
//将字符串分离成数字,分隔符为空格
//当用到数字的时候,跟scanf一样,它要传指针地址
int a,b,c;
sscanf("1 2 3","%d %d %d",&a,&b,&c);
/* set<int> s;//定义容器
//向容器中添加8,1,12,6
//代码略...
set<int>::iterator it;
it=s.find(6);
if(it!=s.end())
cout<<*it<endl;
else
cout<<"not find it"<<endl; */
表述
c.assign(beg,end)c.assign(n,elem)
将[beg; end)区间中的数据赋值给c。将n个elem的拷贝赋值给c。
c.at(idx)
传回索引idx所指的数据,如果idx越界,抛出out_of_range。
c.back()
传回最后一个数据,不检查这个数据是否存在。
cout<<a<<" "<<b<<" "<<c<<endl;
//将字符串分离成数字,分隔符为",",$
//当用到数字的时候,跟scanf一样,它要传指针地址
int x,y,z;
sscanf("4,5$6","%d,%$d %d",&x,&y,&z);
cout<<x<<" "<<y<<" "<<z<<endl;
s.append("可以是字符或字符串")
给string对象插入字符:
s.insert(插入位置,'插入字符')
访问string对象的元素
例子:
string s="abc123456";
cout<<s[0]<<endl;//输出string对象的首元素
cout<<s[0]-'a'<<endl;//两个相同的字符相减值为0
c.insert(pos,elem)
c.insert(pos,n,elem)
c.insert(pos,beg,end)
在pos位置插入一个elem拷贝,传回新数据位置。在pos位置插入n个elem数据。无返回值。在pos位置插入在[beg,end)区间的数据。无返回值。
c.begin()
传回迭代器中的第一个数据地址。
c.size()
返回容器中数据个数。
c.clear()
移除容器中所有数据。
c.empty()
判断容器是否为空,如果非空,则返回逻辑假,即0,否则返回逻辑真,即1。
c.end()
指向迭代器中末端元素的下一个,指向一个不存在元素。
结果:a
0
删除string对象的元素
变量名.clera()方法 全部清空
变量名.erase()方法 清空某位置或某段位置上的值
返回string对象的长度
变量名.length()
判断字符串是否为空
变量名.empty()
替换string对象的字符
变量名.replace(位置,数量,"替换内容");
按字典顺序将此 String 对象表示的字符序列与参数字符串所表示的字符序列进行比较。
如果按字典顺序此 String 对象位于参数字符串之前,则比较结果为一个负整数。
如果按字典顺序此 String 对象位于参数字符串之后,则比较结果为一个正整数。
如果这两个字符串相等,则结果为 0;
compareTo 只在方法 equals(Object) 返回 true 时才返回 0。
{
if(a!=b) return a>b;
else return a>b;
}
};
int main()
{
set<int,myComp> s;
s.insert(8);
s.insert(1);
s.insert(12);
s.insert(6);
相关文档
最新文档