java c stl_数据结构与算法(3)- C++ STL与java se中的vector

声明:虽然本系列博客与具体的编程语言无关。但是本文作者对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!!!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值