这章主要对Java和C++中容器的使用情况做个简要的总结,同时也可以体现出Java和C++在容器方面的不同
1.Java容器类的使用
1.1 List(有序,可重复)
取元素:get();
存元素:set();
迭代器:Iterator,listIterator,它就相当于游标,指向当前元素,因此只能通过对适当位置的元素进行操作,且迭代器要在容器添加好元素后才声明,否则迭代器所指向的元素为空
1.2 Set(无序,不可重复)
存取元素:通过Iterator
在比较值时要重写hashcode()和equal()方法
List和Set都可以通过如下方法来遍历元素,进行某种操作,如:
Set<Integer> s=new HashSet<Integer>;
for(Integer i:s)
{.....}
1.3 Vector有点类似于List,就不做过多的解释了
1.4 Map:键值对,因此一般会用Set容器来存放取出的键值对
存元素:put()
取元素:Iterator <Map.Entry<类型,类型>>=Map对象.entrySet().iterator;
get(key值);
keySet(key值);//获取到以key值作为key的所有value组成的Set对象
注意:若要对map或者list,set等容器中的元素进行排序,可使用Comparator<T>接口,如:
public class myComparator implements Comparator<T>
{
public int compare(T t1,T t2)
{
return t1.compareTo t2;
}
}
.....
myComparator comp=new myComparator();
.....
Collections.sort(list,comp);//假设此时list中已有元素
2.C++中容器类的使用
2.1 Vector
初始化:vector<string> v(数目,初始值);
取元素:v.at(i) pop_back();//取出栈顶元素 v[n];//不能v[n]=.... 迭代器(参考前面所讲章节)
存元素:push_back(); insert();
2.2 List :双向链表
取元素:迭代器 pop_back() pop_front()
存元素:push_back() insert() push_front
2.3 map:键值对
取元素:迭代器
存元素:insert(pair<key-type,value-type>(***,***)); insert(map<key-type,value-type>::value_type(**,**));
在C++中容器的begin,end,find方法返回的都是迭代器
容器无论是在C++中还是Java中都是很有用的东西,是我们编写程序时必不可少要用到的数据结构,因此要灵活运用
容器类还有许多有用的API,可以在具体使用时进行查看
插播下C++中有关字符串和整数之间的转换。。。。
3.C++中字符串转换为int型整数一直是我比较头疼的问题,从网上搜了下资料,整理得如下几个解决的办法:
3.1 #include<sstream>
string s; int n; stringstream ss;//字符串流
cin<<s;//输入字符串
ss<<s;//字符串传递给字符串流
n<<ss;//字符串流传递给整数
同样的道理通过字符串流也可以将整数转换为字符串
3.2利用sscanf()格式化输入函数,不过这种方法用的比较少
sscanf("字符串","格式(与正则表达式类似)","格式化后赋值的对象")
3.3字符串数组如s,通过s[i]-'0'将字符串中的逐个逐个字符转换为相应的整数,这样整个字符串就都转换为了整数
4.C++中有几种智能指针,auto_ptr,shared_ptr,unique_ptr,weak_ptr,智能指针的好处在于能在析构函数中定义delete()函数,这样,当程序终止时,会自动释放指针所指向的内存,避免内存泄露