文章目录
内容介绍
最近在刷LeetCode, 练习Java的同时复习C++。然后发现Java和C++极其容易混淆,比如substring和substr这种。因此,有必要写个笔记方便以后回顾。文章结构将以日期分割。
8 Oct. 2021
字符串截取
C++:substr(起始下标)、substr(起始下标, 子串长度)
参考内容:C++ 中字符串查找、字符串截取、字符串替换
string str = "Morning everyone.";
string sub1 = str.substr(1);
string sub2 = str.substr(1, 3);
Java:substring(起始下标)、substring(起始下标,截止下标)
参考内容:Java截取(提取)子字符串(substring())
String str = "Morning everyone.";
String sub1 = str.substring(1);
String sub2 = str.substring(1, 1+3);
判断是否存在某个元素
C++:find()
string str = "a";
set<string> strSet;
if(strSet.find(str) == strSet.end()){
strSet.insert(str);
}
vector<string> result;
if(find(result.begin(), result.end(), str) == result.end()){
result.push_back(str);
}
Java:contains()
参考内容:java 如何判断集合中是否存在某个元素——contains()
String str = "a";
Set<String> strSet = new HashSet();
if(!strSet.contains(str)){
strSet.add(str);
}
List<String> result = new ArrayList();
if(!result.contains(str)){
result.add(str);
}
11 Oct. 2021
数组定义
C++定义数组,中括号必须放在变量后面。
参考内容C++数组初始化方法
int nums1[10];
int nums2[] = {1,2};
string strs[] = {"One", "Two"}
Java定义数组,中括号放在前面后面都可以。但不能指定数组长度。
参考内容:java 数组的定义(声明)方法
Java中数组的定义方式
int nums1[];
int[] nums2; //推荐使用
int[] nums3 = new int[10]; // 指定数组长度
String[] strs = {"Jan", "Feb", "Mar"};
续行符
当代码一行写不下时,C++可以使用续行符"\"也可以直接换行。
string str = "abcd, \
efgh";
string str[] = {"a", "b",\ // "\"可有可无
"c", "d"};
而Java没有续行符,直接换行。
String str = "abcd" +
"efgh";
String str[] {"a", "b",
"c","d"};
两个字符串相加
C++两个常量字符串相加会报错,因为“a"和"b"都是const char[]类型,而不是string。
参考资料:为什么标准C++中两个直接字符串常量不能相加
string str = "a“ + ”b"; // 报错
string a = "";
string str1 = a + "a"+"b"; // 正常执行
Java两个常量字符串可以正常相加。
String str = "a“+”b";
13 Oct. 2021
命名空间
C++用namespace来避免命名重复的问题
参考资料:C++的命名空间的使用
#include<iostream>
namespace Zi{
int result = 123;
}
int main(){
std::cout<<Zi::result<<std::endl;
return 0;
}
Java用导入类库的方式解决命名问题
参考资料:Java 命名空间的由来和引入
计算程序执行时间
C++的两种方法:ctime和chrono
参考资料:C++11 std::chrono库详解
C++11 新的计时方法——std::chrono 大法好
#include<iostream>
#include<chrono>
#include<ctime>
using namespace std;
using namespace chrono;
void doThis(){
for(int i = 0; i<1e6; i++) {
int a = 1;
}
}
int main(){
// 使用chrono库计算时间 (C++ 11)
// 注:需要使用chrono命名空间;即:using namespace chrono;
auto start = system_clock::now();
doThis();
auto end = system_clock::now();
auto duration = duration_cast<microseconds>(end - start);
// 后面是计算比例的,细节在看上面的链接。
cout<<(double)(duration.count()) * microseconds::period::num / microseconds::period::den <<"s."<<endl;
// 使用传统的ctime计算时间
clock_t cstart = clock();
doThis();
clock_t cend = clock();
cout<<(double)(cend - cstart) / CLOCKS_PER_SEC << "s" << endl;
return 0;
}
Java计算时间
参考资料:java如何计算程序运行时间
public class test {
public static void main(String[] args){
long startTime = System.currentTimeMillis();//获取开始时间
doThis();
long endTime = System.currentTimeMillis(); //获取结束时间
System.out.println((endTime - startTime) + "ms"); //输出程序运行时间
}
private static void doThis(){
for(int i = 0; i<1e6; i++) {
int a = 1;
}
}
}
调用另一个源文件的函数
C++只需要一开始写上函数声明即可。
参考资料:C\C++调用另一个源文件中的函数
Java中如果是static修饰的函数,直接import之后调用;
如果是非静态函数,则需要new一个对象,通过对象调用函数。
参考资料:java中如何调用其他java文件中的方法
原文:第一种方法直接调用,把GetIp.java中的你引用的方法直接改成静态的,然后直接引用的地方引用"包名.类名.方法名"就可以了
还有就是初始化一次,然后直接调用如:T t=new T(); 调用t.method();
20 Oct. 2021
内置排序
C++
#include<algorithm>
#include<vector>
#include<iostream>
using namepace std;
int main(){
//-----------数组排序
int nums[] = {1,2,3,2,1};
int len = sizeof(nums)/sizeof(int);
sort(nums, nums + len);
for(int i : nums) cout<<i<<' ';
//--------vector排序
//C++11之后vector可以这样初始化,11之前的会报错
vector<int> ns = {1,2,3,4,5,6,7,2,1};
sort(ns.begin(), ns.end());
for(int i : ns) cout<<i<<' ';
return 0;
}
Java
参考资料:
1.Java 中使用sort排序
2.Java8排序stream.sorted()
import java.util.Arrays;
import java.util.stream.IntStream; // java8新特性
class streamSort{
public static void main(String[] args){
// Arrays的sort函数
int nums[] = {1,2,3,4,1,2,3};
Arrays.sort(nums);
for(int i : nums)
System.out.println(i);
// java8新特性:stream控制
nums = new int[]{1,2,3,4,1,2,3};
nums = IntStream.of(nums).sorted().toArray();
for(int i : nums)
System.out.println(i);
}
}
最大最小值
C++
参考资料:c++ 求数组最大最小值函数
#include<iostram>
using namespace std;
int main(){
int nums[] = {1,2,3,2,1};
int len = sizeof(nums)/sizeof(int);
cout<<"maximum value is "<<*max_element(nums, nums+len)<<endl;
cout<<"minimum value is "<<*min_element(nums, nums+len)<<endl;
return 0;
}
Java
参考资料:Java8新特性之最小值
import java.util.stream.IntStream;
public class test {
public static void main(String[] args){
int nums[] = {1,2,3,4,1,2,3};
int max = IntStream.of(nums).max().getAsInt();
int min = IntStream.of(nums).min().getAsInt();
System.out.println("The maximum value is " + max);
System.out.println("The minimum value is " + min);
}
}
24 Oct. 2021
反转列表
C++
#inlucde<algorithm>
#inlucde<vector>
vector<int> a = {1,2,3,4,5,6};
reverse(a.begin(), a.end());
Java
import java.util.*;
List<int> li = Arrays.asList(1,2,3,4,5,6);
Collections.reverse(li);