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

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

STL中的vector

stl vector的常用方法

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

stl vector的一些小细节

使用细节:

  • 随着元素的插入,size不断变大,当size过大导致重新分配vector时,vector早期的迭代器会失效。

#include <iostream>
#include <vector> using namespace std; int main()
{
vector<int> 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<int>::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<int>::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<student> query() {
ArrayList<student> students = new ArrayList<student>();
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!!!

我的github

数据结构与算法(3)- C++ STL与java se中的vector的更多相关文章

  1. PTA数据结构与算法题目集(中文) 7-36 社交网络图中结点的“重要性”计算 (30 分)

    PTA数据结构与算法题目集(中文)  7-36 社交网络图中结点的“重要性”计算 (30 分) 7-36 社交网络图中结点的“重要性”计算 (30 分)   在社交网络中,个人或单位(结点)之间通过某 ...

  2. 五种编程语言解释数据结构与算法——顺序表2(java与C++语言实现)

    5.java实现方式: 5.1.顺序表的抽象结构 package com.xgp.顺序表; public interface MyList<T> { //1. initList(& ...

  3. 数据结构与算法之比较排序【Java】

    比较排序与非比较排序的对比 常见的快速排序.归并排序.堆排序.冒泡排序等属于比较排序.在排序的最终结果里,元素之间的次序依赖于它们之间的比较.每个数都必须和其他数进行比较,才能确定自己的位置.在冒泡排 ...

  4. 【数据结构和算法】 O(1)时间取得栈中的最大 / 最小元素值

    常数时间取得栈中的元素最大值和最小值,我们可以想到当push的时候比较一下,如果待push元素值小于栈顶元素,则更新min值,最大值亦然. 这样有个问题就是当pop的时候,就没了最大最小值. 于是上网 ...

  5. 【python cookbook】【数据结构与算法】9.在两个字典中寻找相同点

    问题:寻找两个字典中间相同的地方(相同的键.相同的值等) 解决方案:通过keys()或者items()方法来执行常见的集合操作(比如求并集.交集和差集)

  6. 在Java SE中使用Hibernate处理数据

    如今,Hibernate正在迅速成为非常流行的(如果不是最流行的)J2EE O/R映射程序/数据集成框架.它为开发人员提供了处理企业中的关系数据库的整洁.简明且强大的工具.但如果外部需要访问这些已被包 ...

  7. Java SE中的Synchronized

    1 引言 在多线程并发的编程中Synchronized一直是元老级的角色,很多人会称呼它为重量级锁,但是随着Java SE1.6对Synchronized进行了各种优化以后,有些情况下它并不那么重了. ...

  8. Java数据结构和算法(一)——简介

    本系列博客我们将学习数据结构和算法,为什么要学习数据结构和算法,这里我举个简单的例子. 编程好比是一辆汽车,而数据结构和算法是汽车内部的变速箱.一个开车的人不懂变速箱的原理也是能开车的,同理一个不懂数 ...

  9. Java数据结构和算法(四)赫夫曼树

    Java数据结构和算法(四)赫夫曼树 数据结构与算法目录(https://www.cnblogs.com/binarylei/p/10115867.html) 赫夫曼树又称为最优二叉树,赫夫曼树的一个 ...

随机推荐

  1. aarch64-linux-gnu交叉编译Qt4.7.3

    到 Qt 官网下载合适的 Qt 版本,地址:http://download.qt-project.org/archive/qt/ 1.环境搭建: 1.安装automake.libtool 和主机上的 ...

  2. 关于Android热点模式下的UDP广播

    最近尝试让easylink3在热点模式下连接,发现用普通的广播地址会报错,Network unreachable 尝试按照stackoverflow上的方法: public static int ge ...

  3. android简易双屏支持【转】

    本文转载自:http://blog.csdn.net/sfrysh/article/details/7463339 抱歉,之前说xorg的exa更新的时候恐怕一直不会更新了,没有做xorg开发了.转向 ...

  4. finger的使用

    finger命令用来查询一台主机上的登录账号的信息,通常会显示用户名.主目录.停滞时间.登录时间.登录Shell等信息,使用权限为所有用户. 安装 sudo apt-get install finge ...

  5. MySQL 基础 —— 数据类型、各种变量

    1. 基本数据类型 char:prod_id char(10),括号内的内容表示字符的长度 decimal:十进制,不带参数为整数(四舍五入) text:文本类型,长度不限 2. 日期和时间处理函数 ...

  6. bzoj1047

    二维单调队列 rmq很明显会超时,如果这个序列是一维的,很明显就是个单调队列,现在就是把一维的单调队列转换为二维单调队列. 先求出每一列的窗口极值,然后对于每一行做单调队列,值就是之前求出每个位置结尾 ...

  7. deepin 安装版本管理工具

    在Linux下我们可以使用RapidSVN.RapidSVN是一款轻量级的免费.开源 SVN 客户端,相比tortoise svn它更加小巧而且占系统资源少运行速度快. 一:安装RapidSVN版本控 ...

  8. 洛谷 P1433 吃奶酪(记忆化)

    题目描述 房间里放着n块奶酪.一只小老鼠要把它们都吃掉,问至少要跑多少距离?老鼠一开始在(0,0)点处. 输入输出格式 输入格式: 第一行一个数n (n<=15) 接下来每行2个实数,表示第i块 ...

  9. [C++ STL] deque使用详解

    一.deque介绍: deque(双端队列)是一个动态数组,可以向两端发展,因此不论在尾部或头部安插元素都十分迅速. 在中间部分安插元素则比较费时,因为必须移动其它元素. 二.用法 1.头文件 #in ...

  10. BFS(两点搜索) UVA 11624 Fire!

    题目传送门 /* BFS:首先对火搜索,求出火蔓延到某点的时间,再对J搜索,如果走到的地方火已经烧到了就不入队,直到走出边界. */ /******************************** ...