數據結構與算法(3)- C++ STL與java se中的vector

聲明:雖然本系列博客與具體的編程語言無關。可是本文做者對c++相對比較熟悉,其次是java,因此不免會有視角上的誤差。舉例也大可能是和這兩門語言相關。java

上一篇博客概念性的介紹了vector,咱們有了大體的印象:vector不過就是看上去能夠自增加的數組麼。這篇博客將稍微介紹下STL與se中的vector,由於比較簡單。ios

STL中的vector

stl vector的經常使用方法

其實能夠在這裏看到全部的方法和使用說明。這裏沒有一一介紹的必要哈。這裏要注意下C++98 C++11以及其餘版本的方法可能稍有出入,你要根據本身的須要查看剛纔的那個連接便可。c++

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,代碼要在同步操做上耗費大量時間。另外必須指出:這裏的同步並非徹底的線程安全的,在兩個操做之間並非原子操做!!!。可參見這裏git

java 對象的陷阱

java中全部的變量都是引用,這給熟悉c++的人常常帶來很大的困擾,從而產生不少bugs。今天就踩了一個坑,若是咱們要在循環體中,爲ArrayList add元素,那麼必定要在添加元素前,new一個新的。直接看代碼吧。github

stu = new student(); //這裏必定要new一下sql

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編程

相關文章
相關標籤/搜索