第一篇:标准C++中string类及STL容器类简介
标准C++中string类及STL容器类简介
一.标准C++库字符串类std::string的用法
#include
std::string s1;
std::string s3(s2);
std::string s2(“this is a string”);
begin 得到指向字符串开头的Iterator
end 得到指向字符串结尾的Iterator
rbegin 得到指向反向字符串开头的Iterator
rend 得到指向反向字符串结尾的Iterator
size 得到字符串的大小
length()和size函数功能相同
max_size 字符串可能的最大大小
capacity 在不重新分配内存的情况下,字符串可能的大小 empty 判断是否为空
operator[] 取第几个元素,相当于数组
c_str 取得C风格的const char* 字符串
data 取得字符串内容地址
operator= 赋值操作符
reserve 预留空间
swap 交换函数
insert 插入字符
append 追加字符
push_back 追加字符
erase 删除字符串
clear 清空字符容器中所有内容
resize 重新分配空间
assign 和赋值操作符一样
replace 替代
copy 字符串到空间
find 查找,返回基于0的索引号
rfind 反向查找
find_first_of 查找包含子串中的任何字符,返回第一个位置
find_first_not_of 查找不包含子串中的任何字符,返回第一个位置 find_last_of 查找包含子串中的任何字符,返回最后一个位置
find_last_not_of 查找不包含子串中的任何字符,返回最后一个位置 substr(n1,len)得到字符串从n1开始的长度为len的子串
比较字符串(支持所有的关系运算符)
compare 比较字符串
operator+ 字符串链接
operator+= += 操作符
operator== 判断是否相等
operator!= 判断是否不等于
operator
从输入流中读入字符串
operator
getline 从输入流中读入一行
二.向量类模板std::vector成员函数:
#include
std::vector name;
std::vector name(size);
std::vector name(size,value);
std::vector name(myvector);
std::vector name(first,last);
assign(first,last)用迭代器first,last所指定的元素取代向量元素 assign(num,val)用val的num份副本取代向量元素
at(n)等价于[]运算符,返回向量中位置n的元素
front()返回向量中第一个元素的引用
back()返回向量中最后一个元素的引用
begin()返回向量中第一个元素的迭代器
end()返回向量中最后一个元素的迭代器
max_size()返回向量的最大容量(向量所能容纳的最多元素个数)capacity()返回向量当前所能容纳的最多元素个数
clear()删除向量中所有元素
empty()如果向量为空,返回真
erase(start,end)删除迭代器start end所指定范围内的元素
erase(i)删除迭代器i所指向的元素
insert(i,x)把x插入到迭代器i所指定的位置
insert(i,n,x)把x的n份副本插入到迭代器i所指定的位置
insert(i,start,end)把迭代器start和end所指定的范围内的值插入到迭代器i所指定的位置
push_back(x)把x插入到向量的尾部
pop_back()删除向量中最后一个元素
rbegin()返回一个反向迭代器,该迭代器指向的元素越过了向量中的最后一个元素
rend()返回一个反向迭代器,该迭代器指向向量中第一个元素
reverse()反转元素顺序
resize(n,x)把向量的大小改为n,新元素的初值赋为x
size()返回向量的大小
swap(vectorref)交换2个向量的内容
三.双端队列类模板std::deque成员函数:
#include
std::deque name;
std::deque name(size);
std::deque name(size,value);
std::deque name(mydeque);
std::deque name(first,last);
其成员函数大部分和std::vector相同
PS:
push_front(x)把x放到双向队列的头部
pop_front()把双向队列的第一个元素删除
四.链表类模板std::list成员函数:
#include
std::list name;
std::list name(size);
std::list name(size,value);
std::list name(mylist);
std::list name(first,last);
其成员函数大部分和std::vector相同
PS:
push_front(x)把x放到链表头部
pop_front()把链表第一个元素删除
merge(listref)把listref所引用的链表中的所有元素插入到链表中 remove(val)从链表中删除所有值为val的元素
remove_if(pred)删除链表中谓词pred为真的元素
(谓词即为元素存储和检索的描述,如std::less,std::greater那么就按降序/升序排列,你也可以定义自己的谓词)
sort()根据默认的谓词对链表排序
sort(pred)根据给定的谓词对链表排序
unique()删除所有重复的元素,使链表中没有重复元素(在这之前要对链表中的原始进行排序)
unique(pred)根据谓词pred删除所有重复的元素,使链表中没有重复元素 注意:vector和deque支持随机访问,而list不支持随机访问,因此不支持[]访问!
五.容器适配器堆栈类std::stack成员函数:
#include
stack实现先进后出的操作
std::stack name;
type为堆栈操作的数据类型
container为实现堆栈所用的容器类型,可以为
std::vector,std::deque,std::list
例如
std::stack IntStack;
管理成员函数只有:empty(),size(),top(),push(),pop()
六.容器适配器队列类std::queue成员函数:
#include
queue实现先进先出的操作
std::queue name;
type为队列操作的数据类型
container为实现队列所用的容器类型,可以为
std::vector,std::deque,std::list
管理成员函数只有:empty(),size(),front(),back(),push(),pop()
七.关联式容器:
集合类std::set,多重集合类std::multiset,映射类std::map,多重映射类std::multimap,位集合std::bitset
八.通用算法(对以上STL均适用)
#include
1.非修正序列算法:
2.修正序列算法:
3.排序算法:
4.数值算法:
九.迭代器(类似指针的功能,对容器的内容进行访问)
#include
例如:
std::vector IntVector;
std::vector::iterator first=IntVector.begin();
//begin()得到指向vector开头的Iterator,*first得到开头一个元素的值 std::vector::iterator last=IntVector.end();
//end()得到指向vector结尾的Iterator,*last得到最后一个元素的值
第二篇:C# String类常用方法小结剖析
String类常用方法
1、插入字符串:public string Insert(int startIndex,string value
2、删除字符串:public string Remove(int startIndex public string Remove(int startIndex,int count
3、替换字符串:public string Replace(char oldChar,char newChar public string Replace(string oldString,string newString
4、分割字符串:public string[] Split(char[] separator public string[] Split(char[] separator,int count public string[] Split(char[] separator,StringSplitOptions options public string[] Split(string[] separator,StringSplitOptions options public string[] Split(char[] separator,int count,StringSplitOptions options public string[] Split(string[] separator,int count,StringSplitOptions options 其中,options参数指定字符串分割选项,取值可为StringSplitOptions.None或StringSplitOptions.RemoveEmptyEntries,前者表示返回包含空字符串的数组,后者表示返回不包括空字符串的数组
5、填充字符串(指定或不指定(空白符)字符填充原串到指定长度):public string PadLeft(int totalWidth public string PadLeft(int totalWidth,char paddingChar public string PadRight(int totalWidth public string PadRight(int totalWidth,char paddingChar
6、比较字符串:静态方法——Compare(和CompareOrdinal(;实例方法——CompareTo(。其中,Compare(方法中可含参数有:strA(string指定待比较字符串,igonreCase(bool指定是否要忽略大小写,comparisonType(StringComparison指定比较时所使用的区域、大小写和排序规则,cluture(CultureInfo提供特定于区域性的比较设置信息,indexA(int设置比较子字符串的位置,length(int指定比较子字符串中字符的最大数量。
7、连接字符串:public static string Concat(Object arg0 public static string Concat(params Object[] args public static string Concat(params string[] values public static string Concat(Object arg0,Object arg1 public static string Concat(string str0,string str1 public static string Concat(Object arg0,Object arg1,Object arg2 public static string Concat(string arg0,string arg1,string arg2 public static string Concat(Object arg0,Object arg1,Object arg2,Object arg3 public static string Concat(string arg0,string arg1,string arg2,string arg3 其中,arg0……arg3表示连接对象 public static string Join(string separator,string[] value public static string Join(string separator,string[] value,int
startIndex,int count 其中,startIndex指定对value进行连接的开始下标,count指定连接的字符串数
8、处理字符串中的空白:public string Trim(public string Trim(params char[] trimChars public string TrimEnd(params char[] trimChars public string TrimStart(params char[] trimChars 其中,trimChars指定移除的字符数组;TrimStart从字符串开始位置移除与指定字符数组中相同的字符;TrimEnd从结尾处移除与指定字符数组中相同的字符
9、转换字符串大小写:public string ToUpper(public string ToUpper(CultureInfo culture public string ToLower(public string ToLower(CultureInfo culture 另:public string ToUpperInvariant(public string ToLowerInvariant(使用当前操作系统所在区域的大小写规则进行转换
10、匹配和检索字符串:public bool Contains(string value public bool StartsWith(public bool EndsWith(其中,StartsWith和EndsWith方法可指定的参数有:comparisonType(StringComparison指定比较方式,igonreCase(bool指定是否要忽略大小写,cluture(CultureInfo提供特定于区域性的比较设置信息 public int IndexOf(char/string value,…… public int LastIndexOf(char/string value,…… 可指定的参数有:startIndex(int指定查找的起始位置,count(int指定被查找的字符数量,comparisonType(StringComparison指定所使用的区域、大小写和排序规则 public int IndexOfAny(char[] anyOf,…… public int LastIndexOfAny(char[],anyOf,……
11、获取子字符串:public string Substring(int startIndex public string Substring(int startIndex,int length
12、格式化字符串:public static string Format(string format,Object arg0 public static string Format(stirng format,params Object[] args public static string Format(IFormatProvider provider,string format,params Object[] args public static string Format(string format,Object arg0,Object arg1 public static string Format(string format,Object arg0,Object arg1,Object arg2 其中,provider(IFormatProvider提供特定的区域性格式设置信息
13、编码字符串:使用Encoding类中不同编码方式的GetBytes(string initValue方法,其返回值为byte数组。如:Encoding.UTF8.GetBytes(s;
第三篇:Java容器类学习心得
Java容器类学习心得
Java容器类学习心得
由于我对C++比较熟悉,所以学习Java应该重点体会Java带来的新概念。本文基本上是Java标准库中集合框架的基本概念,没有例子。写本文的目的在于方便我很长时间后若是忘了这些东西可以通过这片文章迅速回忆起来。
1.接口
整个Java容器类的基础是容器接口(例如Collection,Map等接口),而不是类。使用接口的最大好处在于将容器的实现与容器的接口分开,这就意味着你可以使用相同的方法访问容器而不用关心容器是由什么样的数据结构实现的。同样,Iterator接口也使得用户可以使用相同的方法访问不同的容器类。以上这些是通用算法的基础。
1.1 Collection接口
Collection接口有如下基本方法:
boolean add(Object obj):如果添加对象后,集合确实发生了变化,则返回true;否则返回false
Iterator iterator():返回一个实现了Iterator接口的对象
此外,还有
int size(),boolean isEmpty(),boolean contains(Object obj),void clear()等许多有用的方法
1.2 Map接口
Map用于存放关键字/值对。有如下基本方法:
Object get(Object key)
Object put(Object key,Object balue)
Set keySet()
Set entrySet()
此外,还有其他有用的方法。
需要注意的是,从表面看它似乎就是一种由键值对构成的集合,但实际上并不是这样。不过另一方面假如将Map的某一部分看作集合,有时候也还是显得非常方便的。换言之你可以创建一个集合用它来表达Map的那一部分。综上所述,一个Map可以返回的东西包括它的键值构成的一个Set、由它的值构成的一个集合或者由它的键值对构成的一个Set。
1.3 Iterator接口
Iterator接口有下面3个基本方法:
Object next():返回迭代器刚越过的元素的引用
boolean hasNext():判断容器内是否还有可供访问的元素
void remove():删除迭代器刚越过的元素
注意:Java中的迭代器与STL中的迭代器在概念上有很重要的区别。在STL中,迭代器类似于数组的索引,使用这种迭代器可以查看存放在该位置上的元素(类似于通过数组索引i来访问c[i]一样)。Java中的迭代器并不这样运行。查看与位置的变化紧密的结合在一起。每次通过next()访问一个元素的同时,迭代器的位置会自动向前走一步。
这个问题可以这样理解:Java中的迭代器指向的位置并不是元素,而是元素之间。这样,每次调用next()时,迭代器便越过下一个元素,同时返回它刚越过的那个元素的引用。
根据上面的说明,很容易得出下面的代码是错误的:
it.remove();
it.remove();
而下面的代码是正确的:
it.remove();
it.next();
it.remove();
迭代器的典型应用
Iterator it=c.iterator();
while(it.hasNext())
{
Object obj=it.next();
//do something with obj
}
1.4 子接口
1.4.1 List接口
List从Collection接口中分立出来是因为List的特点——有序的集合。这里指的有序并不是按照大小排好序的(Sorted),而是指集合是可以以确定的顺序访问的序列。针对List的这个特点,它比Collection接口增加了通过索引进行操作的方法。例如,add、remove、get、set等方法的参数表中都可以加入索引的数值,从而操作处在索引位置处的元素。
1.4.2 Set接口
Set与List的不同,它里面的元素是无序的;所以,不能通过任何索引的方法来操作Set对象
1.4.3 ListIterator接口
使用与List的迭代器,比Iterator接口增加了一些方法(例如add()等)。此外,由于List是双向表,所以还增加了Object previous()和boolean hasPrevious()方法,用法与next()和hasNext()一样。
1.4.4 SortedMap接口
包含如下基本方法:
Comparator comparator()
Object firstKey()
Object lastKey()
2.抽象容器类
2.1 抽象容器类包括AbstractCollection,AbstractList,AbstractSet等等
2.2 为什么要有抽象结合类?
例如Collection接口中定义了许多有用的方法,如果实现Collection接口的每个类都
自行实现这么多的方法,那将是非常麻烦的。为了使实现Collection接口的类的实现更容易,AbstractCollection类让一些基本方法(比如add()和iterator())变成了抽象的方法,而利用这些基本方法的其他方法(例如addAll()等等)则具体实现了。
3.具体的容器
3.1 ArrayList与LinkedList
都是实现了List接口的类,是有序集。List接口支持通过索引的方法来访问元素,对于这一点,ArrayList没有任何问题;但是对于LinkedList则有很大的问题,链表本身不应该支持随机存储,但是作为List的一个实现,链表也提供了对随机访问的支持,但是效率很低。每次通过索引的方法都是进行一次遍历。我认为,其实就不应该让链表支持随机访问;而Java这样实现我想是因为整个集合框架的体系,使得链表与数组可以使用同样的方法使用。综上所述,对于LinkedList最好不使用随机访问,而使用迭代器。
3.2 TreeSet
3.2.1 TreeSet是SortedSet的一个实现。根据数据结构的知识可以知道,树的效率非常高,而且Java标准库中有TreeSet这样的类,以后应该尽量使用TreeSet来提高程序的效率。
3.2.2 需要注意的是:TreeSet作为有序集,它通过compareTo或者Comparator来将集合元素排序。任何具有相同比较值的元素(无论它们是否equals()),在TreeSet中都作为同一个元素,从而不能有重复。这样以来,即使是不同的对象也不能加入到集合中,这一点有时候很不方便。我在编写A*算法时,不同状态有时候对应着同一个启发函数值,那么这些不同的状态就无法加入到TreeSet中。
3.3 HashSet
3.3.1 HashSet是非常高效的数据结构,与TreeSet不同,HashSet是比较对象的equals()方法来区分不同的对象。这样只有真正不同的对象才能不被重复的加入到集合中。
3.3.2 需要注意的是:HashSet效率非常高,但是对象的hashCode函数不好确定。一般默认的对象的hashCode函数是根据对象的内存地址得到的。好的hashCode函数是HashSet成功运用的关键。
4.视图
4.1 什么是视图?
对映象类使用keySet()方法,仿佛该方法建立了一个新的集合,并将影响的所有关键字都填入这个集合。实际情况并非如此,对这个集合的任何操作都将反映到原始的映象对象上。
实际上,keySet()返回的是一个实现Set接口的对象,对该对象的操作就是对映象的操作。这样的集合成为视图。
4.2 视图的应用
4.2.1 将现有的容器变为线程安全的容器:使用Collections.synchronizedCollection(Collection c)方法,在SDK文档中该方法的解释是“Returns a synchronized(thread-safe)collection backed by the specified collection”。
4.2.2 将现有的容器变为只读的容器:使用Collections.unmodifiableCollection(Collection c)方法,在SDK文档中该方法的解释是“Returns an unmodifiable view of the specified collection.”。
4.2.3 子范围
4.2.4 Arrays类中的asList()方法
5.通用算法
通用的集合接口带来的一大好处就是可以编写通用算法。可以使用Collections中的静态通用方法,也可以编写自己的通用方法。
(具体的算法的内容在此略去)
总结:千万记住这句话——没有最好的容器(数据结构),要根据不同的问题选择不同的容器,以此来达到功能的要求和效率的最优。
第四篇:两种Java容器类List和Set分析
两种Java容器类List和Set分析
【简 介】
容器类可以大大提高编程效率和编程能力,在Java2中,所有的容器都由SUN公司的Joshua Bloch进行了重新设计,丰富了容器类库的功能。
容器类可以大大提高编程效率和编程能力,在Java2中,所有的容器都由SUN公司的Joshua Bloch进行了重新设计,丰富了容器类库的功能。
Java2容器类类库的用途是“保存对象”,它分为两类:
Collection----一组独立的元素,通常这些元素都服从某种规则。List必须保持元素特定的顺序,而Set不能有重复元素。
Map----一组成对的“键值对”对象,即其元素是成对的对象,最典型的应用就是数据字典,并且还有其它广泛的应用。另外,Map可以返回其所有键组成的Set和其所有值组成的Collection,或其键值对组成的Set,并且还可以像数组一样扩展多维Map,只要让Map中键值对的每个“值”是一个Map即可。
1.迭代器
迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层结构。迭代器通常被称为“轻量级”对象,因为创建它的代价小。
Java中的Iterator功能比较简单,并且只能单向移动:
(1)使用方法iterator()要求容器返回一个Iterator。第一次调用Iterator的next()方法时,它返回序列的第一个元素。
(2)使用next()获得序列中的下一个元素。
(3)使用hasNext()检查序列中是否还有元素。
(4)使用remove()将迭代器新返回的元素删除。
Iterator是Java迭代器最简单的实现,为List设计的ListIterator具有更多的功能,它可以从两个方向遍历List,也可以从List中插入和删除元素。
2.List的功能方法
List(interface): 次序是List最重要的特点;它确保维护元素特定的顺序。List为Collection添加了许多方法,使得能够向List中间插入与移除元素(只推荐LinkedList使用)。一个List可以生成ListIterator,使用它可以从两个方向遍历List,也可以从List中间插入和删除元素。
ArrayList: 由数组实现的List。它允许对元素进行快速随机访问,但是向List中间插入与移除元素的速度很慢。ListIterator只应该用来由后向前遍历ArrayList,而不是用来插入和删除元素,因为这
比LinkedList开销要大很多。
LinkedList: 对顺序访问进行了优化,向List中间插入与删除得开销不大,随机访问则相对较慢(可用ArrayList代替)。它具有方法addFirst()、addLast()、getFirst()、getLast()、removeFirst()、removeLast(),这些方法(没有在任何接口或基类中定义过)使得LinkedList可以当作堆栈、队列和双向队列使用。
3.Set的功能方法
Set(interface): 存入Set的每个元素必须是唯一的,因为Set不保存重复元素。加入Set的Object必须定义equals()方法以确保对象的唯一性。Set与Collection有完全一样的接口。Set接口不保证维护元素的次序。
HashSet: 为快速查找而设计的Set。存入HashSet的对象必须定义hashCode()。
TreeSet: 保持次序的Set,底层为树结构。使用它可以从Set中提取有序的序列。
LinkedHashSet: 具有HashSet的查询速度,且内部使用链表维护元素的顺序(插入的次序)。于是在使用迭代器遍历Set时,结果会按元素插入的次序显示。
HashSet采用散列函数对元素进行排序,这是专门为快速查询而设计的;TreeSet采用红黑树的数据结构进行排序元素;LinkedHashSet内部使用散列以加快查询速度,同时使用链表维护元素的次序,使得看起来元素是以插入的顺序保存的。需要注意的是,生成自己的类时,Set需要维护元素的存储顺序,因此要实现Comparable接口并定义compareTo()方法。
第五篇:批发类认定标准范文
批发类认定标准:
1.营业执照带“批发”或者“批零”字样;
2.批发市场内的商户,需提供租赁证明和市场方开具的证明;
3.某品牌代理商,需提供品牌授权书或者代理协议;
4.营业执照带有“生产、加工和销售”字样的生产性企业。
注意:封顶机器办理移动机器必须满足以下条件:
必须为有限公司
注册资金50万以上
能提供上门收款协议(样本见“群共享”里面“供货单”)