转载请注明出处(~ ̄▽ ̄)~

个人第一篇博客,觉得不错就点个“推荐”吧 φ(゜▽゜*)♪



虽然自己是先学的C++,再学的Java,但是相对而言,自己写Java比写C++要相对多一些。参加算法竞赛时起初也是更加喜欢使用Java(毕竟没有奇奇怪怪的段错误),但是愈发感觉国内算法竞赛(其实哪里都是)对C++以外的语言还是不太友好的,所以在此做一个简单的总结,把一些常用操作做一个对比。(以方便被打压的Java选手转型C++)

一维数组初始化

Java
int[] arr = new int[len]; // len代表长度,在下文可能会有不少这类的默认变量
int[] arr = {1,2,3};
int[] arr = new int[]{1,2,3};
C++
int *pia = new int[10]; // 每个元素都没有初始化
int *pia2 = new int[10] (); // 每个元素初始化为0
string *psa = new string[10]; // 每个元素调用默认构造函数初始化
string *psa = new string[10](); // 每个元素调用默认构造函数初始化
char *cp = new char[len];
delete [] cp;
int value[100] = {1,2}; // value[0]和value[1]的值分别为1和2,而没有定义的value[i>1]则初始化为0

二维数组初始化

Java
//Java的二维数组不一定需要是一个矩阵
int[][] arr = new int[len][len];
String[][] arr = new String[len][len]; //非基本类型还需对每个元素单独进行new
C++
int value[9][9]; // value[i][j]的值不定,没有初始化
int value[9][9] = {{1,1},{2}}; //value[0][0,1]和value[1][0]的值初始化,其他初始化为0
int (*value)[n] = new int[m][n];
delete []value; // n必须为常量,调用直观。未初始化
int** value = new int* [m];
for(int i=0;i<m;++i) value[i] = new int[n];
for(int i=0;i<m;++i) delete []value[i];
delete []value; // 多次析构,存储麻烦,未初始化

多维数组初始化:

Java

同于二维

C++
int arr[1][2][3];
int arr[1][2][3] = {{1}};

数组初始化(使用函数)

Java
Arrays.fill(arr,0);
C++
memset(arr,0,sizeof(arr))   //memset用于对连续内存进行初始化,更快
fill(arr,arr+len,0)

集合类及操作

列表

Java
List<Integer> l = new ArrayList<Integer>();
List<Integer> l = new LinkedList<Integer>();
l.add(e);
l.add(ind,e);
l.addAll(ll);
l.get(ind);
l.indexOf(e);
l.isEmpty();
l.remove(ind);
l.set(ind,e);
l.size();
l.clear();
C++
vector<int> a ;               //声明一个int型向量a
vector<int> a(10) ; //声明一个初始大小为10的向量
vector<int> a(10, 1) ; //声明一个初始大小为10且初始值都为1的向量
vector<int> b(a) ; //声明并用向量a初始化向量b
vector<int> b(a.begin(), a.begin()+3) ; //将a向量中从第0个到第2个(共3个)作为向量b的初始值
vector<vector<int>> vec(row,vector<int>(col,0));
int n[] = {1, 2, 3, 4, 5} ;
vector<int> a(n, n+5) ; //将数组n的前5个元素作为向量a的初值
vector<int> a(&n[1], &n[4]) ; //将n[1] - n[4]范围内的元素作为向量a的初值
a.emplace_back(e);// emplace_back为C++ 11的函数,若不支持可以使用push_back
a.emplace(a.begin()+4, e);
dest.insert(dest.end(), src.begin(), src.end());
a[ind];
find(a.begin( ), a.end( ), e ); //没找到则返回a.end()
a.empty();
a.erase(ind);
a.erase(first,last);
a[ind]=e;
a.size();
a.clear();

集合

Java
Set<Integer> s = new HashSet<Integer>();
Set<Integer> s = new TreeSet<Integer>();
s.add(e);
s.addAll(ss);
s.contains(e);
s.isEmpty();
s.remove(e);
s.size();
s.clear();
C++
unordered_set<int> s;
unordered_set<string> myset = {"yellow","green","blue"};
s.insert(e); //也可范围插入
s.find(e); //没找到则返回s.end()
s.empty();
s.earse(e);
s.size();
s.clear();

Map

Java
Map<Integer,Integer> map = new HashMap<>();
map.put(1,1);
map.containsKey(k);
map.containsValue(v);
map.get(k);
map.isEmpty();
map.remove(k);
map.size();
C++
unordered_map<string,double> map;
pair<string,double> myshopping ("baking powder",0.3);
//pair只有两个值,而tuple可以支持多个值
//tuple<int,int,int> t(1,1,1);
//get<ind>(t);
//make_tuple<int,int,int>(1,1,1);
map.insert (myshopping); // 复制插入
map.insert (make_pair<string,double>("eggs",6.0)); // 移动插入
map.insert (mypantry.begin(), mypantry.end()); // 范围插入
map.insert ({{"sugar",0.8},{"salt",0.1}}); // 初始化数组插入(可以用二维一次插入多个元素,也可以用一维插入一个元素)
map["coffee"] = 10.0; //数组形式插入
map.count(k); //为1则是有,为0则是没有
map.find(k); //返回map.end()则是没有
map.empty();
map.earse(k);
map.size();

队列

Java
Queue<Integer> q = new LinkedList<>();
q.add(e);
q.poll();
q.peek();
q.isEmpty();
q.size();
C++
queue<string> q;
q.emplace(e);
q.front();
q.pop();
q.empty();
q.size();

双向队列

Java
Deque<Integer> q = new ArrayDeque<>();
q.addFirst(e);
q.addLast(e);
q.getFirst(e);
q.getLast(e);
q.peekFirst(e);
q.peekLast(e);
q.removeFirst(e);
q.removeLast(e);
q.isEmpty();
q.size();
C++
deque<int> q;
q.emplace_front(e);
q.emplace_back(e);
q.pop_front(e);
q.pop_back(e);
q.assign(beg,end); //区间赋值
q.empty();
q.size();

Java
推荐使用Deque
C++
stack<int> s;
s.empty(); //如果栈为空则返回true, 否则返回false;
s.size(); //返回栈中元素的个数
s.top(); //返回栈顶元素, 但不删除该元素
s.pop(); //弹出栈顶元素, 但不返回其值
s.emplce(); //将元素压入栈顶

Java
Queue<Integer> q = new PriorityQueue<>();
//其余方法同于队列
C++
//升序队列
priority_queue <int,vector<int>,greater<int> > q;
//降序队列
priority_queue <int,vector<int>,less<int> >q;
//对于基础类型 默认是大顶堆
priority_queue<int> q;
//除了q.top()才是访问队列首元素,其他方法保持与队列一致

类型转换

Java
//基本类型转化为字符串
String.valueOf()
//字符串转基本类型
XXX.parseXXX()
C++
//基本类型转化为字符串
to_string (val);
std::stringstream ssTemp;
ssTemp<<5;
std::string strDst=ssTemp.str();
//字符串转基本类型
stoi()、stol()、stoll()、atof()
int a = 0;
char *strData = "123";
stringstream stream(strData );
stream>>a;

文件操作与重定向

Java
//保存最原始的输入输出流
InputStream in = System.in;
PrintStream out = System.out;
System.setIn(new FileInputStream("in.txt"));
System.setOut(new PrintStream("out.txt"));
BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream("test.txt"),"UTF-8"));
PrintWriter pw = new PrintWriter("text.txt");
C++
ifstream fin("test.dat");
ofstream fout("test.dat");
streambuf * backup;
ifstream fin;
ofstream fout;
fout.open("data.txt");
backup = cout.rdbuf();
cout.rdbuf(fout.rdbuf());
cout.rdbuf(backup);

如有错误,还望不吝指出。

转载请注明出处(~ ̄▽ ̄)~

C++与Java的API对比(集合操作等方面)的更多相关文章

  1. JAVA学习第三十四课 (经常使用对象API)—List集合及其子类特点

    整个集合框架中最经常使用的就是List(列表)和Set(集) 一.List集合 && Set的特点 Collection的子接口: 1.List:有序(存入和取出的顺序一致),元素都有 ...

  2. java中的集合操作类(未完待续)

    申明: 实习生的肤浅理解,如发现有错误之处.还望大牛们多多指点 废话 事实上我写java的后台操作,我每次都会遇到一条语句:List<XXXXX> list = new ArrayList ...

  3. java的list集合操作List<T>转化List<Long>

    java的list集合操作List<T>转化List<Long> package com.google.common.collect; import com.google.co ...

  4. JAVA集合操作的利器:CollectionUtils

    使用 CollectionUtils 中四个方法之一执行集合操作.这四种分别是 union(),intersection();disjunction(); subtract(); 下列例子就是演示了如 ...

  5. Java多线程系列--“JUC集合”03之 CopyOnWriteArraySet

    概要 本章是JUC系列中的CopyOnWriteArraySet篇.接下来,会先对CopyOnWriteArraySet进行基本介绍,然后再说明它的原理,接着通过代码去分析,最后通过示例更进一步的了解 ...

  6. Java多线程系列--“JUC集合”05之 ConcurrentSkipListMap

    概要 本章对Java.util.concurrent包中的ConcurrentSkipListMap类进行详细的介绍.内容包括:ConcurrentSkipListMap介绍ConcurrentSki ...

  7. 2018.6.19 Java核心API与高级编程实践复习总结

    Java 核心编程API与高级编程实践 第一章 异常 1.1 异常概述 在程序运行中,经常会出现一些意外情况,这些意外会导致程序出错或者崩溃而影响程序的正常执行,在java语言中,将这些程序意外称为异 ...

  8. JAVASE02-Unit05: 集合操作 —— 查找表

    Unit05: 集合操作 -- 查找表 使用该类测试自定义元素的集合排序 package day05; /** * 使用该类测试自定义元素的集合排序 * @author adminitartor * ...

  9. Java 2D API - 1. 基本概念

    Java 2D API扩展AWT包,对二维图形.文本及成像功能提供了支持,可用于开发复杂的界面.绘图软件和图像编辑器.Java 2D对象位于用户坐标空间(User coordinate space), ...

  10. Java多线程系列--“JUC集合”02之 CopyOnWriteArrayList

    概要 本章是"JUC系列"的CopyOnWriteArrayList篇.接下来,会先对CopyOnWriteArrayList进行基本介绍,然后再说明它的原理,接着通过代码去分析, ...

随机推荐

  1. windows10设置共享目录

    win10设置目录局域网内共享 1.右键点击文件属性,点击共享 2.选择与其共享的用户 3.点击共享,选择everyone,可以让在同一局域网下的用户访问 4.显示你的文件夹已共享 5.在同一局域网的 ...

  2. 我的第一个NPM包:panghu-planebattle-esm(胖虎飞机大战)使用说明

    好家伙,我的包终于开发完啦 欢迎使用胖虎的飞机大战包!! 为你的主页添加色彩 这是一个有趣的网页小游戏包,使用canvas和js开发 使用ES6模块化开发 效果图如下:  (觉得图片太sb的可以自己改 ...

  3. chrome Dev Tools 性能分析 performance

    chrome 的performance用来分析性能优化性能非常好用,下面以一个页面来举例 性能分析 性能分析最好使用隐私无痕模式,以保证干净的环境下,避免chrome插件对性能分析结果的影响 Perf ...

  4. TypeScript FromData添加数组

    本文解决的是,如何向FromData添加对象数组. 在FormData中添加数据并使用Axios向后台请求数据,参数是列表对象File[] 结果接口请求时,数据变成了字符串: 试试直接使用File[] ...

  5. Win YAPI + Jenkins 实现接口自动化测试

    自动化测试 传统的接口自动化测试成本高,大量的项目没有使用自动化测试保证接口的质量,仅仅依靠手动测试,是非常不可靠和容易出错的. 为了解决这个问题,使用YAPI接口自动化测试功能,只需要配置每个接口的 ...

  6. CS144 计算机网络 Lab4:TCP Connection

    前言 经过前面几个实验的铺垫,终于到了将他们组合起来的时候了.Lab4 将实现 TCP Connection 功能,内部含有 TCPReceiver 和 TCPSender,可以与 TCP 连接的另一 ...

  7. BugKu_never_give_up

    if(!$_GET['id']) { header('Location: hello.php?id=1'); exit(); } $id=$_GET['id']; $a=$_GET['a']; $b= ...

  8. 富文本编辑器 VUE-QUILL-EDITOR 使用教程 (最全)

    VUE-QUILL-EDITOR 基于 QUILL.适用于 VUE 的富文本编辑器,支持服务端渲染和单页应用,非常高效简洁. 一.基础用法 1.NPM 导入 VUE-QUILL-EDITOR npm ...

  9. 2020-10-22:谈谈java中的LongAdder和LongAccumulator的相同点和不同点。

    福哥答案2020-10-22: 简单回答:相同点:都是多个单元操作.不同点:LongAdder相加,LongAccumulator自定义计算规则. 中级回答:相同点: LongAddr与LongAcc ...

  10. 2022-04-20:小团去参加军训,军训快要结束了, 长官想要把大家一排n个人分成m组,然后让每组分别去参加阅兵仪式, 只能选择相邻的人一组,不能随意改变队伍中人的位置, 阅兵仪式上会进行打分,其中

    2022-04-20:小团去参加军训,军训快要结束了, 长官想要把大家一排n个人分成m组,然后让每组分别去参加阅兵仪式, 只能选择相邻的人一组,不能随意改变队伍中人的位置, 阅兵仪式上会进行打分,其中 ...