C++++有什么iostream头文件的作用?

转载于:http://www.cnblogs.com/zswbky/p/5432016.html用C++代码敲代码,一般都会用C++提交,但是后由于一些细微的不同使用不同的编译方式还是会产生差别的,甚至是WR和AC的天壤之别。从网上找了点资料:G++是GNU的那个C++编译器,也是Dev-CPP自带的编译器和NOI系列赛官方的编译器。。而C++是VC++,是微软出的编译器。一般来说,两个结果不一样,要么是因为G++效率略低被卡掉,要么是因为写的代码用了C++标准里没规定的东西oj 中G++和C++区别1、输出double类型时,如果采用G++提交,scanf采用%lf,prinf采用%f,否则会报错2、使用GCC/G++的提醒:对于64位整数, long long int 和 __int64 都是支持并且等价的.但是在读和写的时候只支持scanf("%I64d", …)和printf("%I64d", …).不支持"%lld"是因为MinGW下的GCC和G++使用的msvcrt.dll动态链接库并不支持C99标准.(这句话好像说的有问题,因为我lld用过,提交成功,但是最好还是用I64吧,这个好像通用点)根据ISO C++标准,在G++下,main函数的返回值必须是int,否则将会导致Compile Error(编译错误)的判答3、G++/GCC使用scanf、printf时注意引用<stdio.h>,只引用<iostream>不识别4、提交C语言代码最好使用G++,因为G++兼容C和C++。C的代码可以用GCC也可用G++提交,而C++的代码不能够用GCC提交,只能用G++。因此最好一个通过不了的两个都试试,编译器的问题有的时候不好找(尤其是遇到long long 类型的和double的输入输出的时候)。首先更正一个概念,C++是一门计算机编程语言,G++不是语言,是一款编译器中编译C++程序的命令而已。那么他们之间的区别是什么?在提交题目中的语言选项里,G++和C++都代表编译的方式。准确地说,选择C++的话,意味着你将使用的是最标准的编译方式,也就是ANSI C++编译。如果你使用的是G++的话,意味着你将使用GNU项目中最平凡适用人群最多的编译器(其实也就是我们熟悉的Code::Blocks的自带的编译器,Windows环境里一般是MinGW下的gcc,Linux中的gcc和前者基本是一个东西)进行编译。类似的还有选择C和GCC,前者是标准C编译器编译,后者同样是用gcc来编译。编译器的差别——编译器的优化当然,很多时候我们有的代码用C++提交通过了,但是G++却失败了呢?众所周知,不同的编译器,会对代码做出一些不同的优化。举一个最简单的例子。针对单个语句(注意,是单个语句,不是包含在语句中的那种前++和后++):a: a++;b: ++a;一般的讲,我们都知道,这两条语句的最终结果是一样的,就是a自己增加了1。但是,两者的差距还是有的。如果从标准C的角度去理解。a++这个语句等同于a: a = a + 1也就是说,我是先调用,再自增。在调用过程中,会申请一个新的数据地址,用于存放临时的变量a’,然后在把a’加1,之后在把a’赋值给a。但是++a这个语句不需要这么麻烦。因为他是先自增,后调用,也就是省去了申请新地址的功夫。所以理论上,二者的时间消耗是有差异的,如果你是使用标准C的编译方式,就可以发现这个差异。毕竟,申请临时内存这个操作耗费的时间,远远比令已知内存的数据进行一个改变要长的多。但是编译器的优化就体现在了这种本身结果相同却耗时有差异的地方。如果你使用gcc来编译,结果你会发现前++与后++二者基本上没有差异。这就是编译器的优化中的冰山一角了。事实上还有很多优化的地方。补充:如何避免由于编译器差别带来的错误1、判题系统使用的是G++编译器,和普通使用的TC,VC都有所不同,建议大家使用Dev C++作为IDE,或者用TC和VC写代码,提交前使用Dev C++编译,预防编译错误。2、G++包含库的时候不要使用iostream.h,应该使用<iostream>有些常用的函数所在的库会被VC自动包含,但是不会被G++包含。例如memset,strlen,strstr等和字符串处理相关的函数在库<cstring>中;abs在<cstdlib>中;fabs,sin,sqrt等数学函数在<cmath>中为了避免CE,大家可以索性一次性把所有可能用到的库都给包含上。C++注意要使用using namespace std;3、关于整数,在G++下,long和int是完全一样的4、浮点数:使用double以减小误差,格式控制字符串是"%lf"(不要使用float)。浮点数的相等不能直接用==来判断,需要使用实数判等。5、标识符,G++中有一些在VC中没有的保留字,比如and,or,not等等,使用这些保留字作为标识符会产生CE。6、对于输入输出,建议不要使用cin和cout,这种输入输出方式会比较慢,在数据量大的时候容易引起超时。7、关于main函数,定义一定要是int型,并记得加上return 0。int main(){… return 0; }8、当使用类似于for (int i=0;i<n;i++)这种形式对循环变量进行定义时,注意循环变量的作用域只在这个循环内。9、输入法在敲代码和提交代码的时候一定要确保关闭,代码中(除了注释部分)有全角字符会引起CE,注释建议使用英文。10、使用STL的同学请注意例如下面的声明是会引起CE的vector<vector<int>> adj; 应该改为vector<vector<int> > adj;连续两个左右箭头间要一个空格。
函数指针让“函数”可以是一个“变量”。通常我们认为一件事由“动作”和“数据”组成,比如“小明泡妞”中,小明是数据,妞是数据,泡是动作。动作和数据边界清晰,各自含义也直观。把动作数据化,真的是各种编程语言一路下来心心念念的要有各种实现各种改进的念想。就以典型面向过程式的C语言为例:函数指针在C语言中就存在;并且相比支持面向对象的其它语言,比如C++,函数指针在C语言更加广泛地应用;地位很高。用不好甚至不会用函数指针的C程序员,基本就是“雏”。事实上在现实的生活经验中,人类就有大量需要"动作数据化"的时候。以“小明泡妞“为例。小明不是雏,相反,他是渣:他同时向5个女生发起约会;这个5个女生和他的亲近关系各不相同,以小红和小白为例:小红每次吃饭都拿脚在餐桌下勾小明……的拖鞋;小白则只要小明盯她超过0.05秒就会甩一巴掌大骂“流氓”。所以,同样是“泡”由于泡的对象不同,导致五种“泡”的动作包含的实质内容,天差地别,近乎没有共性——尽管从外部看,它们都是一类操作:泡妞。五个几乎没有共性的操作,你是要分5个函数各自写,还是揉入1个函数用一堆if/else来判断,区分?显然是个正常人都会选前者。于是就有:void PaoA(char const* name) { cout << "和" << name << "看文艺电影" << endl; }
void PaoB(char const* name) { cout << "陪" << name << "逛街购物,我花钱" << endl;
}
void PaoC(char const* name) { cout << name << ",走,到军博看大炮去!" << endl; }
void PaoD(char const* name) { cout << name << ",我们来谈人生好吗?" << endl; }
void PaoE(char const* name) { cout << name << ",川菜还是撸串?" << endl; }
你以为我们是讲多态——小明依据最终成功约到的女生不同,执行不同的Pao行为?不是不是,我想说的是小明把5位女生都成功约好,并且时间安排得非常合理,于是这个周末,小明要做的,就是逐个调用一遍就对了! 逐个调用?现在有两种做法,一个是:void WeekendDate()
{
PaoA("丁晓晓");
PaoB("贾玲玲");
PaoC("林子绿");
PaoD("王梦");
PaoE("水原希");
}
这就是你说的“直接调用函数”——但别忘了我们的关键业务需求:小明之渣。小明下周可能又约另外5个甚至6个;并且约的对象也在变;约到后泡的操作也会变……如此,就会想到最好还是做两个数组,一个存储女生(的姓名),一个存储对应的“泡”法:#include <iostream>
using namespace std;
void PaoA(char const* name) { cout << "和" << name << "看文艺电影" << endl; }
void PaoB(char const* name) { cout << "陪" << name << "逛街购物,我花钱" << endl;
}
void PaoC(char const* name) { cout << name << ",走,到军博看大炮去!" << endl; }
void PaoD(char const* name) { cout << name << ",我们来谈人生好吗?" << endl; }
void PaoE(char const* name) { cout << name << ",川菜还是撸串?" << endl; }
char const* names [] =
{
"丁晓晓", "贾玲玲", "林子绿", "王梦", "水原希"
};
using F = void (*)(char const*);
F functions [] =
{
PaoA, PaoB, PaoC, PaoD, PaoE
};
void WeekendDate()
{
for (auto i=0; i<sizeof(names)/sizeof(names[0]); ++i)
{
functions[i](names[i]);
}
}
int main()
{
WeekendDate();
}
以上代码100%可直接跑,输出如下:和丁晓晓看文艺电影
陪贾玲玲逛街购物,我花钱
林子绿,走,到军博看大炮去!
王梦,我们来谈人生好吗?
水原希,川菜还是撸串?
下周,再下周……当约的人有变化,我们就修改names数组,再对应修改每个人名对应可执行的动作(也已经是数组)就好了;至于那个 “WeekendDate”所要表达的周末约会都不用变啦……事主小明表示担心:再下下周,同样是5个人,同样是周末,同样是约会,但我想开群体活动,五个一起来!多大的事,别说理论上的"同时",就是真要多线程并发(小明有四个分身)约会也没问题啊!事实上业务需求越复杂,往往代表数据之间的关系或耦合也越紧密,此时names和 functions这样的数据化设计,也就越能体现它们的正确性。以并发为例:#include <iostream>
#include <thread>
using namespace std;
void PaoA(char const* name) { cout << "和" << name << "看文艺电影" << endl; }
void PaoB(char const* name) { cout << "陪" << name << "逛街购物,我花钱" << endl;
}
void PaoC(char const* name) { cout << name << ",走,到军博看大炮去!" << endl; }
void PaoD(char const* name) { cout << name << ",我们来谈人生好吗?" << endl; }
void PaoE(char const* name) { cout << name << ",川菜还是撸串?" << endl; }
using F = void (*)(char const*);
F functions [] =
{
PaoA, PaoB, PaoC, PaoD, PaoE
};
char const* names [] =
{
"丁晓晓", "贾玲玲", "林子绿", "王梦", "水原希"
};
constexpr std::size_t N = sizeof(names)/sizeof(names[0]);
void WeekendDate()
{
for (auto i=0; i<N; ++i)
{
functions[i](names[i]);
}
}
void CrazyWeekendDate()
{
std::thread trds [N];
for (std::size_t i=0; i<N; ++i)
{
auto trd = std::thread([i]
{
functions[i](names[i]);
});
trds[i] = std::move(trd);
}
for (auto& trd: trds)
{
trd.join();
}
}
int main()
{
std::cout << "辛苦的周末:\n";
WeekendDate();
std::cout << "\n";
std::cout << "混乱的周末:\n";
CrazyWeekendDate();
}
运行后的一种输出可能是:辛苦的周末:
和丁晓晓看文艺电影
陪贾玲玲逛街购物,我花钱
林子绿,走,到军博看大炮去!
王梦,我们来谈人生好吗?
水原希,川菜还是撸串?
混乱的周末:
水原希,川菜还是撸串?
王梦,我们来谈人生好吗?
林子绿,走,到军博看大炮去!
陪贾玲玲逛街购物,我花钱
和丁晓晓看文艺电影如果改回“直 接 调 用”,那个线程创建的过程,大概是这样的:
auto trd = std::thread([i]
{
if (names[i] == std::string("丁晓晓"))

paoA(names[i);
}
else if (names[i] == std::string("贾玲玲"))

paoB(names[i);

else if (names[i] == std::string("林子绿"))

paoC(names[i);

else if (...)
{
....
}
});
或者改用判断 “i”的值——但那样会更不直观……悟到重点了没?1. 解决问题,若不能依赖于(优雅的)数据结构, 那就得依赖于(粗鄙的)流程结构。2. 函数通常使用流程结构来组织,一旦函数可以数据化,就能让数据结构也过来帮忙表达复杂的操作。因此,多数语言以及多数有品的程序员,都希望有将“动作”数据化的能力。更多这方面的讨论,有需要的查看《白话C++》。上下两部,练功讲C++语言,练武讲C++各种流行库(图形窗口编程、数据库、游戏……)的使用。学语言语法编程思想,也学语言的实际应用,学中用,用中学,同一套书顺畅解决学习C++编程必然要迈过的两个难关。你说在“混乱的周末”里,没有对cout 对象加锁,屏幕输出可能会混杂在一起——在本例中,这是特性,而不是bug;不信你自己实践一下,同时带5个女人出门试试!“你们一个接一个的说话,避免并发冲突”“干嘛要这样有规矩,我们就喜欢七嘴八舌。”欢迎学习更多:d2school 。

详细...
详细
展开选择擅长的领域继续答题?
{@each tagList as item}
${item.tagName}
{@/each}
手机回答更方便,互动更有趣,下载APP
提交成功是否继续回答问题?
手机回答更方便,互动更有趣,下载APP
展开全部
C/C++是编程语言,C是C++的爸爸,也就是说C++从C发展而来,而C++完全兼容C的语法.国际上有一个专门管理C++的机构,它们负责C++的标准制定. VC++是微软公司的C++编译环境,使用它可以极大的提高编程速度. C#是微软的一种高级编程语言,是微软自己制定的标准,它只是采用了C++的少数特性,跟C++不粘边.C#的特点是安全,用它编制的程序,不容易崩溃.但它的执行效率只有C++程序的几十分之一. 看了一个遍历字符串的例子,书上说C++的效率要比C好很多,我不解,。。。 [/QUOTE] 书上这么说, 那么他的依据是什么呢? 说话总得有个依据啊. [QUOTE] C++的效率是他用代码的长度换来的,也就是C++牺牲了空间的灵活性 [/QUOTE] C++ 代码的长度通常不会比C语言写的代码长多少。 对于那些很简单的问题,当然C的代码要比C++ 来的短, 但对于一个比较复杂的问题来讲,OOP的优点就体现出来了,为什么呢?因为代码的重复利用性。因为对象的相互作用性。这样开发出来的代码就容易理解,容易维护。当问题复杂以后,C++的代码反而比C的代码来的短。而且C 的代码相对难理解,一旦代码很长以后。 C++ 牺牲空间灵活性,我个人觉得也谈不上。 C和C++ 是在不同层面的两种兵器,就像短刀和长刀一样。
已赞过已踩过你对这个回答的评价是?评论
收起
展开全部C++这个词在中国大陆的程序员圈子中通常被读做“C加加”,而西方的程序员通常读做“C plus plus”,“CPP”。 它是一种使用非常广泛的计算机编程语言。C++是一种静态数据类型检查的,支持多重编程范式的通用程序设计语言。它支持过程化程序设计、数据抽象、面向对象程序设计、制作图标等等泛型程序设计等多种程序设计风格。展开全部一种编程语言
展开全部计算机编程的程序软件
收起
更多回答(3)
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
为你推荐:
下载百度知道APP,抢鲜体验使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。扫描二维码下载
×个人、企业类侵权投诉
违法有害信息,请在下方选择后提交
类别色情低俗
涉嫌违法犯罪
时政信息不实
垃圾广告
低质灌水
我们会通过消息、邮箱等方式尽快将举报结果通知您。说明
做任务开宝箱累计完成0
个任务
10任务
50任务
100任务
200任务
任务列表加载中...

我要回帖

更多关于 c++的用途 的文章