g++ stl 和 vc2008 stl的区别?

xia_wj 2011-06-02 04:37:32

string s = "1234";
string a = s;
printf ("%x %x\n", a.c_str(), s.c_str());


g++上面2个字符串地址是一样的, 指向同一块内存.
vc 2008上面2个字符串地址是不一样的, 指向不同的内存.

windows和linux的stl实现不同吗? 还有其他地方不同的吗?
...全文
201 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
xia_wj 2011-06-02
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 healer_kx 的回复:]

楼主写程序还考虑跨平台吗?
[/Quote]

感谢各位的帮忙了.
基本在windows上面写程序, 用vs2008, 然后到linux下编译运行.偶尔会在windows下面调试.
当然调用系统api的时候, 会写2套代码, 用#if #elif 区分一下, 没想到stl这部分也会不一样.
healer_kx 2011-06-02
  • 打赏
  • 举报
回复
楼主写程序还考虑跨平台吗?
ChengNan_ 2011-06-02
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 pengzhixi 的回复:]

标准从来就没规定要怎么实现。所以无标准可循
[/Quote]
标准不规定实现,但是实现要遵循标准,就像C++编译器一样,各有各的是实现,但是他应该要满足C++的标准。
pengzhixi 2011-06-02
  • 打赏
  • 举报
回复
标准从来就没规定要怎么实现。所以无标准可循
ChengNan_ 2011-06-02
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 xia_wj 的回复:]

如果各个平台stl的实现不一样, 就会出现很多陷阱.
会给移植带来很多问题.
[/Quote]
我觉得,实现至少遵循标准吧,如果你去依赖各个平台的实现,反而给移植带来问题。
两者的vector实现不一样,如果对vector用sort排序,VS中的要慢。
healer_kx 2011-06-02
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 xia_wj 的回复:]

再请教一下各位牛人, windows和linux的stl还有其他方面的区别吗?
有没有什么官方的文档.
[/Quote]

用起来基本是一致的。

毕竟你问的问题本来不应该是暴露出来的。
xia_wj 2011-06-02
  • 打赏
  • 举报
回复
再请教一下各位牛人, windows和linux的stl还有其他方面的区别吗?
有没有什么官方的文档.
ChengNan_ 2011-06-02
  • 打赏
  • 举报
回复
这是string的实现方式不一样,有的是引用计数实现,有的不是
xia_wj 2011-06-02
  • 打赏
  • 举报
回复
如果各个平台stl的实现不一样, 就会出现很多陷阱.
会给移植带来很多问题.
healer_kx 2011-06-02
  • 打赏
  • 举报
回复
我觉得还是VS2008的好一些。

Copy On Write是以前的实现方式了。

你google一下,我提到的词汇。
pengzhixi 2011-06-02
  • 打赏
  • 举报
回复
那说明g++使用的引用计数而vc没用呗
ACM的,你懂得 ACM做题过程中的一些小技巧。 1.一般用C语言节约空间,要用C++库函数或STL时才用C++; cout、cin和printf、scanf最好不要混用。 大数据输入输出时最好不要用cin、cout,防止超时。 2.有时候int型不够用,可以用long long或__int64型(两个下划线__)。 值类型表示值介于 -2^63 ( -9,223,372,036,854,775,808) 到2^63-1(+9,223,372,036,854,775,807 )之间的整数。 printf("%I64d",a); //__int64 一般VC编译器使用(虽然有的OJ用g++,但是动态链接库用的windows的,所以要用%I64d输入输出) printf("%lld",a); //long long 一般g++编译器使用 3.OJ判断是只看输出结果的,所以不要要多余的提示输出。 所以大部分题处理一组数据后可以直接输出,就不需要用数组保存每一个Case的数据。 while(case--) { scanf(...); ...... printf(...); } 4.纯字符串用puts()输出。 数据大时最好用scanf()、printf()减少时间。 先用scanf(),再用gets()会读入回车。所以在中间加一个getchar(); scanf("%c%c",&c1,&c2)会读入空格;建议用%s读取字符串,取第一个字符。 5. 读到文件的结尾,程序自动结束 while( ( scanf(“%d”, &a) ) != -1 ) while( ( scanf(“%d”, &a) ) != EOF) while( ( scanf(“%d”, &a) ) == 1 ) while( ~( scanf(“%d”, &a) ) ) 读到一个0时,程序结束 while( scanf(“%d”, &a) , a) while( scanf(“%d”, &a)!=EOF && a) 读到多个0时,程序结束 while( scanf(“%d%d%d”, &a, &b, &c), a+b+c ) //a,b,c非负 while( scanf(“%d%d%d”, &a, &b, &c), a|b|c ) 6.数组定义int a[10] = {0};可以对其全部元素赋值为0; 数组太大不要这样,防止CE。 全局变量,静态变量自动初始化为0; 函数中定义的变量存储在栈空间中,数组太大需要定义为全局变量(存储在堆空间中)。 7.有很多数学题是有规律的,直接推公式或用递归、循环。 8.圆周率=acos(-1.0) 自然对数=exp(1.0) 9.如果要乘或除2^n,用位移运算速度快。a>>n;a

65,199

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧