数据结构与算法(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 <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的更多相关文章
- PTA数据结构与算法题目集(中文) 7-36 社交网络图中结点的“重要性”计算 (30 分)
PTA数据结构与算法题目集(中文) 7-36 社交网络图中结点的“重要性”计算 (30 分) 7-36 社交网络图中结点的“重要性”计算 (30 分) 在社交网络中,个人或单位(结点)之间通过某 ...
- 五种编程语言解释数据结构与算法——顺序表2(java与C++语言实现)
5.java实现方式: 5.1.顺序表的抽象结构 package com.xgp.顺序表; public interface MyList<T> { //1. initList(& ...
- 数据结构与算法之比较排序【Java】
比较排序与非比较排序的对比 常见的快速排序.归并排序.堆排序.冒泡排序等属于比较排序.在排序的最终结果里,元素之间的次序依赖于它们之间的比较.每个数都必须和其他数进行比较,才能确定自己的位置.在冒泡排 ...
- 【数据结构和算法】 O(1)时间取得栈中的最大 / 最小元素值
常数时间取得栈中的元素最大值和最小值,我们可以想到当push的时候比较一下,如果待push元素值小于栈顶元素,则更新min值,最大值亦然. 这样有个问题就是当pop的时候,就没了最大最小值. 于是上网 ...
- 【python cookbook】【数据结构与算法】9.在两个字典中寻找相同点
问题:寻找两个字典中间相同的地方(相同的键.相同的值等) 解决方案:通过keys()或者items()方法来执行常见的集合操作(比如求并集.交集和差集)
- 在Java SE中使用Hibernate处理数据
如今,Hibernate正在迅速成为非常流行的(如果不是最流行的)J2EE O/R映射程序/数据集成框架.它为开发人员提供了处理企业中的关系数据库的整洁.简明且强大的工具.但如果外部需要访问这些已被包 ...
- Java SE中的Synchronized
1 引言 在多线程并发的编程中Synchronized一直是元老级的角色,很多人会称呼它为重量级锁,但是随着Java SE1.6对Synchronized进行了各种优化以后,有些情况下它并不那么重了. ...
- Java数据结构和算法(一)——简介
本系列博客我们将学习数据结构和算法,为什么要学习数据结构和算法,这里我举个简单的例子. 编程好比是一辆汽车,而数据结构和算法是汽车内部的变速箱.一个开车的人不懂变速箱的原理也是能开车的,同理一个不懂数 ...
- Java数据结构和算法(四)赫夫曼树
Java数据结构和算法(四)赫夫曼树 数据结构与算法目录(https://www.cnblogs.com/binarylei/p/10115867.html) 赫夫曼树又称为最优二叉树,赫夫曼树的一个 ...
随机推荐
- 2016/1/25 多线程 作业 方法一 继承Thread 方法二 实现Runnable 多线程笔记
/* * 1,尝试定义一个继承Thread类的类,并覆盖run()方法, * 在run()方法中每隔100毫秒打印一句话.*/ package Stream; //方法一 继承Thread 实现多线程 ...
- NSubstitute
https://github.com/nsubstitute/NSubstitute http://nsubstitute.github.io/help/creating-a-substitute/
- 【NOIP1999】【Codevs 1046】旅行家的预算
http://codevs.cn/problem/1046/ Solution: 贪心,如果当前油价很低,它就比起当前剩余油的价还低就可以替换,并且每次加满,最后把剩的油卖掉即可 油价用单调链表(不知 ...
- poj 2186(tarjan+缩点)
Popular Cows Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 37083 Accepted: 15104 De ...
- BZOJ_3667_Rabin-Miller算法_Mille_Rabin+Pollard rho
BZOJ_3667_Rabin-Miller算法_Mille_Rabin+Pollard rho Description Input 第一行:CAS,代表数据组数(不大于350),以下CAS行,每行一 ...
- POJ2749 Building road
传送门 这道题真是2-SAT好题啊!!卡了我两个点才做完……垃圾POJ还不告诉我哪错了…… 首先我们先花一段时间把题看懂……(其实是翻译一下),之后我们发现因为每个谷仓只能向一个中转点连边,所以他就是 ...
- 4.7.4 Constructing LALR Parsing Tables
4.7.4 Constructing LALR Parsing Tables We now introduce our last parser construction method, the LAL ...
- python-----使用requirements.txt批量安装包
首先写一个 requirements.txt,格式如图: 然后使用命令行,到 requirements.txt 所在的目录下,执行命令: pip install -r requirements.txt ...
- mysql数据库中的十进位是什么意思?
一般在用小数的时候才有用,比如类型你设置了double,十进位你设为2,那么你可以放0.22的值,但是放0.222的值它会自动四舍五入为0.22,相当于小数位数吧
- HDU 2544 最短路 (Floyd)
题意:略. 析:由于 n 比较小,所以我们可以用Floyd,完全不会超时. 代码如下: #pragma comment(linker, "/STACK:1024000000,10240000 ...