博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据结构与算法(3)- C++ STL与java se中的vector
阅读量:5237 次
发布时间:2019-06-14

本文共 2682 字,大约阅读时间需要 8 分钟。

声明:虽然本系列博客与具体的编程语言无关。但是本文作者对c++相对比较熟悉,其次是java,所以难免会有视角上的偏差。举例也大多是和这两门语言相关。

概念性的介绍了vector,我们有了大致的印象:vector不过就是看上去可以自增长的数组么。这篇博客将稍微介绍下STL与se中的vector,因为比较简单。

STL中的vector

stl vector的常用方法

其实可以在看到所有的方法和使用说明。这里没有一一介绍的必要哈。这里要注意下C++98 C++11以及其他版本的方法可能稍有出入,你要根据自己的需要查看刚才的那个链接即可。

stl vector的一些小细节

使用细节:

  • 随着元素的插入,size不断变大,当size过大导致重新分配vector时,vector早期的迭代器会失效。
#include 
#include
using namespace std;int main(){ vector
vec; for (int i = 0; i < 10; ++i) { vec.push_back(i); //添加元素 } for(int val : vec) { cout << val << " "; // 0,1,2,3,4,5,6,7,8,9 } cout << endl; //迭代器 vector
::iterator it = vec.begin(); while (it != vec.end()) { cout << *it << " "; // 0,1,2,3,4,5,6,7,8,9 it++; } cout << endl; //重置迭代器it it = vec.begin(); for (int i = 10; i < 25; ++i) { vec.push_back(i); //添加元素 } //来一个新的迭代器 vector
::iterator itnew = vec.begin(); while (itnew != vec.end()) { cout << *itnew << " "; //正常打印 0,1,2,3,4,5,6,7,8,9...... itnew++; } cout << endl; //测试旧迭代器 while (it != vec.end()) { cout << *it << " "; //我会报错使程序当掉 0,1,2,3,4,5,6,7,8,9...... it++; } cout << endl; system("pause"); return 0;}
  • vector::pop_back不返回任何值。

java se 中的相关概念

在java中,和vector更加接近的其实是ArrayList,但是其没有重载[],而是通过get与set方法获取与设置数据。当然java中也有Vector,只不过java中的Vector是同步的,可以由两个线程安全地访问一个Vector对象。但是,如果由一个线程访问Vector,代码要在同步操作上耗费大量时间。另外必须指出:这里的同步并不是完全的线程安全的,在两个操作之间并不是原子操作!!!。可参见。

java 对象的陷阱

java中所有的变量都是引用,这给熟悉c++的人经常带来很大的困扰,从而产生很多bugs。今天就踩了一个坑,如果我们要在循环体中,为ArrayList add元素,那么一定要在添加元素前,new一个新的。直接看代码吧。

stu = new student(); //这里一定要new一下

public ArrayList
query() { ArrayList
students = new ArrayList
(); try { //1. 连接 conn = JDBCUtil.getConn(); //2. statement st = conn.createStatement(); String sql = "select * from t_stu"; rs = st.executeQuery(sql); while(rs.next()){ stu = new student(); //这里一定要new一下 stu.setid(rs.getInt("id")); stu.setage(rs.getInt("age")); stu.setname(rs.getString("name")); students.add(stu); } System.out.println(students); } catch (Exception e) { e.printStackTrace(); }finally { JDBCUtil.release(conn, st, rs); } return students; }

小秘密:下一篇将讲解list以及由list组成的基本数据结构。

See you next time. Happy Coding!!!

转载于:https://www.cnblogs.com/dnhua/p/10087990.html

你可能感兴趣的文章
51nod1076 (边双连通)
查看>>
Item 9: Avoid Conversion Operators in Your APIs(Effective C#)
查看>>
面试很痛苦,备点前端面试题(一)——js数据类型及其转换
查看>>
js去除空格
查看>>
学习Spring Boot:(二十八)Spring Security 权限认证
查看>>
IT学习神器——慕课网App获App Store、Android应用市场重磅推荐
查看>>
Linux网络状态工具ss命令使用详解
查看>>
菜根谭#21
查看>>
Python Paramiko模块与MySQL数据库操作
查看>>
vc6 使用的那些事
查看>>
opengl实现直线扫描算法和区域填充算法
查看>>
答读者问(18):一个大四学生有关专业发展的相关疑问
查看>>
Eclipse使用异常——tomcat启动
查看>>
hdu 1418(抱歉)(欧拉公式,定点数,棱数,面数的关系)(水题)
查看>>
【翻译】ExtJS vs AngularJS
查看>>
C++ 虚函数表解析
查看>>
3D数学读书笔记——矩阵进阶
查看>>
目标检測的图像特征提取之(一)HOG特征
查看>>
JS正则--留档
查看>>
cssText笔记
查看>>