string也有极限

作者通过编写代码测试C++string的容量,发现随着不断添加空格,内存占用迅速增长,直到达到10亿多字节。这揭示了string类型在内存分配上的设计策略。
摘要由CSDN通过智能技术生成

有一天,我闲来无事,想:string会不会有极限呢?

于是,我就打开Dev-C++

#include <bits/stdc++.h>
using namespace std;
int main(){
	string p;
	for(int i=1;;i++){
		p+=' ';
	}
	return 0;
}

这个代码是在string里一直加空格

运行后……

我一猜,就是string的极限到了。

我用freopen打开一个文件,叫test.txt

#include <bits/stdc++.h>
using namespace std;
int main(){
	freopen("test.txt","w",stdout);
	string p;
	for(int i=1;;i++){
		p+=' ';
		cout<<i<<endl;
	}
	return 0;
}

运行!

2分钟后……

已经生成了180MB的文件了,可是程序还没运行完。

【TWO THOUSANDS YEARS LATER】

uhh...

已经1GB了

所以……我看了看string的函数

哈哈!正合我意!

#include <bits/stdc++.h>
using namespace std;
int main(){
	string p;
	cout<<p.max_size();
	return 0;
}

max_size() 

我们得到了string的最长值是1073741820,也就是2²⁰-4

我觉得这是string给其他variable(比如说npos)的预留

本博客由百联又一博客冠名播出

  • 17
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
对Base64字符串进行极限压缩,可以采用一些高级的压缩算法,如LZ77或LZ78。以下是示例代码,使用LZ77算法对Base64字符串进行极限压缩: ```java import java.util.zip.Deflater; import java.util.zip.Inflater; import java.util.Base64; public class Base64ExtremeCompression { public static String compress(String base64String) { byte[] decodedBytes = Base64.getDecoder().decode(base64String); byte[] compressedBytes = compressBytes(decodedBytes); return Base64.getEncoder().encodeToString(compressedBytes); } public static String decompress(String compressedBase64String) { byte[] compressedBytes = Base64.getDecoder().decode(compressedBase64String); byte[] decompressedBytes = decompressBytes(compressedBytes); return Base64.getEncoder().encodeToString(decompressedBytes); } private static byte[] compressBytes(byte[] data) { Deflater deflater = new Deflater(Deflater.BEST_COMPRESSION, true); deflater.setInput(data); deflater.finish(); byte[] buffer = new byte[data.length]; int compressedSize = deflater.deflate(buffer); byte[] compressedData = new byte[compressedSize]; System.arraycopy(buffer, 0, compressedData, 0, compressedSize); return compressedData; } private static byte[] decompressBytes(byte[] data) { Inflater inflater = new Inflater(true); inflater.setInput(data); byte[] buffer = new byte[data.length * 10]; int decompressedSize; try { decompressedSize = inflater.inflate(buffer); } catch (Exception e) { throw new RuntimeException("Failed to decompress data", e); } byte[] decompressedData = new byte[decompressedSize]; System.arraycopy(buffer, 0, decompressedData, 0, decompressedSize); return decompressedData; } } ``` 可以使用以下代码测试: ```java String base64String = "SGVsbG8gV29ybGQh"; String compressedBase64String = Base64ExtremeCompression.compress(base64String); System.out.println(compressedBase64String); // 输出: "eJzTykwuyczPAQAAP//I1g==" String decompressedBase64String = Base64ExtremeCompression.decompress(compressedBase64String); System.out.println(decompressedBase64String); // 输出: "SGVsbG8gV29ybGQh" ``` 需要注意的是,极限压缩虽然可以压缩Base64字符串的大小,但是压缩和解压缩的速度会变慢,同时压缩率也受到压缩算法和数据本身的影响。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值