c/c++语言开发共享数据结构与算法(3)- C++ STL与java se中的vector

声明:虽然本系列博客与具体的编程语言无关。但是本文作者对c++相对比较熟悉,其次是java,所以难免会有视角上的偏差。举例也大多是和这两门语言相关。 “上一篇博客” 概念性的介绍了vector,我们有了大致的印象:vector不过就是看上去可以自增长的数组么。这篇博客将稍微介绍下STL与se中的ve …


声明:虽然本系列博客与具体的编程语言无关。但是c/c++开发分享数据结构与算法(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!!!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/c-cdevelopment/606024.html

(0)
上一篇 2021年5月13日
下一篇 2021年5月13日

精彩推荐