精华内容
下载资源
问答
  • iostream
    千次阅读
    2022-04-13 18:08:01

    iostream是什么

    iostream是信息流,控制输入输出

    iostream怎么用

    #include<iostream>
    
    using namespace std;
    
    int a;
    
    int main(){
        //输入
        cin>>a;
        //输出
        cout<<a<<'\n';
    
        return 0;
    }

    iostream缺失

    在C:\Program Files (x86)\Dev-Cpp\MinGW64\lib\gcc\x86_64-w64-mingw32\4.9.2\include\c++添加一个叫iostream的文件(不加后缀名),用c++打开后粘贴如下代码后编译即可修复

    // Standard iostream objects -*- C++ -*-
    
    // Copyright (C) 1997-2014 Free Software Foundation, Inc.
    //
    // This file is part of the GNU ISO C++ Library.  This library is free
    // software; you can redistribute it and/or modify it under the
    // terms of the GNU General Public License as published by the
    // Free Software Foundation; either version 3, or (at your option)
    // any later version.
    
    // This library is distributed in the hope that it will be useful,
    // but WITHOUT ANY WARRANTY; without even the implied warranty of
    // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    // GNU General Public License for more details.
    
    // Under Section 7 of GPL version 3, you are granted additional
    // permissions described in the GCC Runtime Library Exception, version
    // 3.1, as published by the Free Software Foundation.
    
    // You should have received a copy of the GNU General Public License and
    // a copy of the GCC Runtime Library Exception along with this program;
    // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
    // <http://www.gnu.org/licenses/>.
    
    /** @file include/iostream
     *  This is a Standard C++ Library header.
     */
    
    //
    // ISO C++ 14882: 27.3  Standard iostream objects
    //
    
    #ifndef _GLIBCXX_IOSTREAM
    #define _GLIBCXX_IOSTREAM 1
    
    #pragma GCC system_header
    
    #include <bits/c++config.h>
    #include <ostream>
    #include <istream>
    
    namespace std _GLIBCXX_VISIBILITY(default)
    {
    _GLIBCXX_BEGIN_NAMESPACE_VERSION
    
      /**
       *  @name Standard Stream Objects
       *
       *  The &lt;iostream&gt; header declares the eight <em>standard stream
       *  objects</em>.  For other declarations, see
       *  http://gcc.gnu.org/onlinedocs/libstdc++/manual/io.html
       *  and the @link iosfwd I/O forward declarations @endlink
       *
       *  They are required by default to cooperate with the global C
       *  library's @c FILE streams, and to be available during program
       *  startup and termination. For more information, see the section of the
       *  manual linked to above.
      */
      //@{
      extern istream cin;		/// Linked to standard input
      extern ostream cout;		/// Linked to standard output
      extern ostream cerr;		/// Linked to standard error (unbuffered)
      extern ostream clog;		/// Linked to standard error (buffered)
    
    #ifdef _GLIBCXX_USE_WCHAR_T
      extern wistream wcin;		/// Linked to standard input
      extern wostream wcout;	/// Linked to standard output
      extern wostream wcerr;	/// Linked to standard error (unbuffered)
      extern wostream wclog;	/// Linked to standard error (buffered)
    #endif
      //@}
    
      // For construction of filebuffers for cout, cin, cerr, clog et. al.
      static ios_base::Init __ioinit;
    
    _GLIBCXX_END_NAMESPACE_VERSION
    } // namespace
    
    #endif /* _GLIBCXX_IOSTREAM */

    更多相关内容
  • IOStream

    2021-02-21 08:03:20
    IOStream
  • C语言头文件 IOSTREAM

    2022-06-12 12:50:11
    C语言头文件 IOSTREAMC语言头文件 IOSTREAMC语言头文件 IOSTREAMC语言头文件 IOSTREAMC语言头文件 IOSTREAMC语言头文件 IOSTREAMC语言头文件 IOSTREAMC语言头文件 IOSTREAMC语言头文件 IOSTREAMC语言头文件 IOSTREAM...
  • 据说从 Visual C++ .NET 2003 开始,移除了旧的 iostream 库。其实编译器制造商不会停止对客户现有软件提供支持,所以在可以预计的将来,旧的C++头文件还会嚣张一段时间。如果能明白字符串头文件的使用,举一反三,...
  • iostream

    千次阅读 多人点赞 2020-11-13 13:24:26
    iostream是指iostream库。iostream的意思是输入输出流,直接点说就是in(输入) out(输出) stream(流),取in、out的首字母与stream合成。 组成 iostream 库的基础是两种命名为 istream 和 ostream 的类型,...

    iostream是指iostream库。iostream的意思是输入输出流,直接点说就是in(输入) out(输出) stream(流),取in、out的首字母与stream合成。

    组成

    iostream 库的基础是两种命名为 istream 和 ostream 的类型,分别表示输入流和输出流。流是指要从某种 IO 设备上读出或写入字符序列。术语“流”试图说明字符是随着时间顺序生成或消耗的。

    标准库定义了 4 个 IO 对象。处理输入时使用命名为 cin(读作 see-in)的 istream 类型对象。这个对象也称为标准输入。处理输出时使用命名为 cout(读作 see-out)的 ostream 类型对象,这个对象也称为标准输出。标准库还定义了另外两个 ostream 对象,分别命名为 cerr 和 clog(分别读作“see-err”和“see-log”)。cerr 对象又叫作标准错误,通常用来输出警告和错误信息给程序的使用者。而 clog 对象用于产生程序执行的一般信息

    基本类模板

    iostream(.h)库的基础是类模板的层级结构。类模板以一种与类型无关的方式,提供了这个库的大部分功能。

    基本类模板是一个类模板的集合,其中每个类模板有两个参数:字符类型(charT)参数决定处理的元素类型,而特性参数 对每个特定的元素类型提供一些额外的特征

    这个类层级结构中的类模板和它们的字符类型的实例相比,名字前面多了前缀basic_。例如,istream由之实例化而来的类模板名为basic_istream,fstream由之实例化而来的类模板名为basic_fstream,等等。唯一的例外是ios_base,因为它本身就是类型无关的,所以它并不基于任何类模板,而是一个正规类。

    类模板实例

    iostream(.h)库中集成了两组标准的整个iostream类模板层级结构的实例:一组是面向单字节的,处理char类型的元素;另一组是面向宽字节的,处理wchar_t类型的元素。

    面向单字节(char型)的实例可能是iostream(.h)库更为人所知的一部分。 ios、istream和ofstream等类都是面向单字节的。右图是面向单字节的所有类的名称和关系。

    面向单字节的类的名称和关系

    面向单字节的类的名称和关系

    面向宽字节(wchar_t型)的实例的命名规则与面向单字节的实例相同,但所有类和对象名称前有前缀w,例如wios、wistream和wofstream。

    标准对象

    作为iostream(.h)库的一部分,头文件<iostream(.h)>声明了一些用来在标准输入输出设备上进行输入输出操作的对象。

    这些对象分为两组:面向单字节的,即常见的cin、cout、cerr和clog;其面向宽字节的对应物,声明为wcin、wcout、wcerr和wclog。

    类型

    iostream(.h)库中的类很少对其成员的原型使用基本类型,而是通常使用根据其实例的特性定义的类型。对默认的char和wchar_t型的实例,类型streampos、streamoff和streamsize分别用以表示位置、偏移和大小。

    操纵符

    操纵符是用来与对流对象进行操作的插入(<<,把流插入到输出设备或输出缓冲区中)提取(>>,把流从输入缓冲区提取到变量中)运算符一同使用的全局函数。它们通常变更流的属性和格式设置。endl、hex和scientific是一些操纵符的例子。

    缓冲区介绍

    输入:从磁盘上读取大量信息,将这些信息存储在缓冲区中,然后每次从缓冲区读取一个字节,到达缓冲区尾部,再从磁盘上读取另一块数据

       但是键盘每次输入一个字符时可以用不缓冲区,但是用缓冲区输入可以让程序没有传给程序之前返回并改正,c++通常是用户按下回车键刷新缓冲区

    输出:程序首先填满缓冲区,然后把整块数据给磁盘,并清空缓冲区,以备下一批输入。

       对于输出屏幕,输出换行符时刷新缓冲区(也可能是其他:当输入语句到达时,他刷新缓冲区中当前所有输出

    刷新缓冲:用cout将字节发送给标准输出时由于ostream类对cout对象输出进行缓冲,输出并不会直接发送到目标地址,而是在缓冲区中,直到缓冲区填满,然后flush缓冲区,把内容发送出去并且清空缓冲,缓冲区通常为512byte或其整数倍。

      对于屏幕来说,程序不必等到缓冲区填满,1.将换行符发送到缓冲区时刷新缓冲区;2.输入即将发生时刷新缓冲区。

    flush(cout);
    cout<<"hello word"<<flush;
    cout<<"hello word"<<endl;//刷新缓冲区并插入换行符 

    以上三种方式均可以刷新缓冲区

    cout<<'\n';只是输出换行符,不刷新缓冲区;\n只代表换行的转义字符;\n是C中间的格式输出换行,C++保留了下来;输出'\n'是实际输出了的'\10',往输出流里添加了信息,所有的字符都是'\xx'的形式,换行符也是,你用其它任何字符输出一下,前面都会有四个'*'填充的

    在c++中,io操作都是有io对象来实现的,每个io对象又管理一个缓冲区用于存储程序读写的数据

    只有缓冲区被刷新的时候缓冲区中的内容才会写入真实的文件或输出设备上。

    那么,什么情况下会刷新输出缓冲区呢,有如下五种情况:

    1.程序正常结束。作为main返回工作的一部分,将清空所有的输出缓冲区。

    2.在一些不确定的时候,缓冲区可能已经满了,在这种情况下,缓冲区将会在写下一个值之前刷新。

    3.用操纵符显示地刷新缓冲区,如用endl。

    4.在每次输出操作执行完毕后,用unitbuf操纵符设置流的内部状态,从而清空缓冲区

    5.可将输出流与输入流关联起来,在读输入流时将刷新其关联的输出缓冲区

    	// 操纵符
    	cout << "hi!" << flush; // flushes the buffer, adds no data
    	cout << "hi!" << ends; // inserts a null, then flushes the buffer
    	cout << "hi!" << endl; // inserts a newline, then flushes the buffer
     
    	// unitbuf操纵符
    	cout << unitbuf << "first" << " second" << nounitbuf;
     
    	// unitbuf会在每次执行完写操作后都刷新流
     
    	// 上条语句等价于
    	cout << "first" << flush << " second" << flush;
     
    	// nounitbuf将流恢复为正常的,由系统管理的缓冲区方式
     
    	// 将输入输出绑在一起
    	// 标准库已经将cin和cout绑定在一起
    	// 我们可以调用tie()来实现绑定
    	cin.tie(&cout); // the library ties cin and cout for us
    	ostream *old_tie = cin.tie();
    	cin.tie(0); // break tie to cout, cout no longer flushed when cin is read
    	cin.tie(&cerr); // ties cin and cerr, not necessarily a good idea!
    	cin.tie(0); // break tie between cin and cerr
    	cin.tie(old_tie); // restablish normal tie between cin and cout

    C++语言

    #include<iostream>是标准的C++头文件,任何符合标准的C++开发环境都有这个头文件。

    在旧的标准C++中,使用#include<iostream.h>,但在新标准中,用#include<iostream>,而且在VC中编程的同时要注意要添加命名空间(std)

    using namespace std;

    头文件包含了以下对象:

    窄字符(char)

    • cin:标准输入流

    • cout:标准输出流

    • cerr:错误的标准输出流

    • clog:用于记录的标准输出流

    宽字符(wchar_t)

    • wcin标准输入流(宽)

    • wcout:标准输出流(宽)

    • wcerr:错误的标准输出流(面向广角)

    • wclog:用于记录的标准输出流(宽)

    在C++中,输入输出流被定义为类。C++的I/O库中的类称为流类(stream class)。用流类定义的对象称为流对象。

    历史

    很多学C++的都知道,C++中有一个iostream.h。这是C++早期版本所使用的,而现在版本已经不支持。现在版本用的是iostream。(#include "iostream")在C++的早期版本面世后,业界内普遍反映iostream.h速度慢,C++也在不断地改进,而到某一版本,新写出了一种输入输出流,此输入输出流速度较快,被业界普遍接受。C++标准为了凸显C++与C的不同,以及C++对以往的进步,还有对C++早期语言的兼容,将此输入输出流命名为iostream,而同时也保留了iostream.h,这两个文件可以在Viual Studio编辑器中的外部依赖项看到。它们的代码是不尽相同的。

    using namespace std详解

    一 :

    <iostream>和<iostream.h>是不一样,前者没有后缀,实际上,在你的编译器include文件夹里面可以看到,二者是两个文件,打开文件就会发现,里面的代码是不一样的。

    后缀为.h的头文件c++标准已经明确提出不支持了,早些的实现将标准库功能定义在全局空间里,声明在带.h后缀的头文件里,c++标准为了和C区别开,也为了正确使用命名空间,规定头文件不使用后缀.h。

    因此,当使用<iostream.h>时,相当于在c中调用库函数,使用的是全局命名空间,也就是早期的c++实现;当使用<iostream>的时候,该头文件没有定义全局命名空间,必须使用namespace std;这样才能正确使用cout。

    二:

    所谓namespace,是指标识符的各种可见范围

    C++标准程序库中的所有标识符都被定义于一个名为std的namespace中。

    由于namespace的概念,使用C++标准程序库的任何标识符时,可以有三种选择:

    1、直接指定标识符。例如std::ostream而不是ostream。完整语句如下:

    std::cout << std::hex << 3.4 << std::endl;

    2、使用using关键字

    using std::cout;

    using std::endl;

    以上程序可以写成

    cout << std::hex << 3.4 << endl;

    3、最方便的就是使用using namespace std;

    例如:

    #include <iostream>

    #include <sstream>

    #include <string>

    using namespace std;

    这样命名空间std内定义的所有标识符都有效(曝光)。就好像它们被声明为全局变量一样。那么以上语句可以如下写:

    cout << hex << 3.4 << endl;

    在iostream文件头中定义的类有ios,istream,ostream,iostream,istream_withassign,ostream_withassign,iostream_withassign等。

    因为标准库非常的庞大,所以程序员在选择的类的名称或函数名时就很有可能和标准库中的某个名字相同。所以为了避免这种情况所造成的名字冲突,就把标准库中的一切都放在名字空间std中。但这又会带来了一个新问题。无数原有的C++代码都依赖于使用了多年的伪标准库中的功能,他们都是在全局空间下的。

    所以就有了<iostream.h>和<iostream>等等这样的头文件,一个是为了兼容以前的C++代码,一个是为了支持新的标准。

    命名空间std封装的是标准程序库的名称,标准程序库为了和以前的头文件区别,一般不加".h" .

    内容

    // iostream standard header
    #if     _MSC_VER > 1000
    #pragma once
    #endif
    #ifndef _IOSTREAM_
    #define _IOSTREAM_
    #include <istream>
    #ifdef  _MSC_VER
    #pragma pack(push,8)
    #endif  /* _MSC_VER */
    _STD_BEGIN 
             // OBJECTS
    static ios_base::
    Init _Ios_init;
    extern _CRTIMP istream cin;
    extern _CRTIMP ostream cout;
    extern _CRTIMP ostream cerr, clog;
              // CLASS _Winit
    class _CRTIMP _Winit {
    public:
         _Winit(); 
         ~_Winit();
    
    private: 
        static int _Init_cnt;
    
         }; 
              // WIDE OBJECTS
    
    static _Winit _Wios_init;
    extern _CRTIMP wistream wcin;
    extern _CRTIMP wostream wcout, wcerr, wclog;
    
    _STD_END
    #ifdef  _MSC_VER
    #pragma pack(pop)
    #endif  /* _MSC_VER */
    #endif /* _IOSTREAM_ */
    /*
     * Copyright (c) 1994 by P.J. Plauger.  ALL RIGHTS RESERVED. 
     * Consult your license regarding permissions and restrictions.
     */

     

    展开全文
  • iostream.h头文件

    2019-02-11 22:59:02
    解决部分源文件无法打开的问题,在VS2015的环境下,部分源文件无法打开,可能是源文件库中的源文件缺失了.h后缀,从程序的安装路径中找到文集库,给对应的源文件加上后缀就可以了
  • IOstream_javaIOl流_

    2021-10-02 10:42:46
    主要包括java中的四大流的学习测试,完成文件的基本读写操作
  • 摘要:Java源码,Android,Android源码 一个Android源码:IOStream实例,针对IO流操作的一个小例子,与学习android的初级编程者共勉,希望能帮助您快速学会Android编程开发。
  • C语言头文件 IOSTREAM.H

    2022-06-12 12:49:39
    C语言头文件 IOSTREAM.HC语言头文件 IOSTREAM.HC语言头文件 IOSTREAM.HC语言头文件 IOSTREAM.HC语言头文件 IOSTREAM.HC语言头文件 IOSTREAM.HC语言头文件 IOSTREAM.HC语言头文件 IOSTREAM.HC语言头文件 IOSTREAM.HC...
  • c++ iostream 教程 PPT

    2018-03-15 20:04:06
    C++ solution is a set of classes defined in the iostream and fstream header files.
  • Android IOStream实例操作源代码,针对IO流操作与学习android的初级编程者共勉。
  • VC2003之后这两个头文件没有了,但是目前通过vc编译的帧需要这两个头文件,本人用作以太网帧的传输,供大家参考
  • IOSTREAM.H

    千次下载 热门讨论 2012-03-01 14:32:43
    IOSTREAM.H文件VS2003后没的
  • c++标准库iostream

    千次阅读 2021-11-14 16:19:24
    iostream引用 iostream是c++的常用标准库之一,内部包含了很多我们常用的函数,为了防止库与我们自定义的名称冲突,所以他也使用了命名空间,封装的命名空间名称为std。std的声明在iostream头文件中,与众不同的是...

            我们学习c的时候也频繁用到了一些库,但是库并不多,c++也有库,且比c要多,通常越高级的语言库越多,如java、python等封装越严重的语言库就更多,在学习高级语言时学习库占比变得很重,如python我们学习完他的语法才算刚刚入门,后面的提高就是库的应用。一个典型的c程序(后缀.c)可以完全被视为c++程序来编译。在c++的编译器中自动定义了一个long int型__cplusplus(双下划线)变量用来存放当前c++的版本,而c没有该变量,所以c程序可以使用宏来判断是否有定义__cplusplus符号来判断当前是c还是c++的编译环境。

            c++的源文件名的常用扩展名有.cpp .cxx .cc .c .c++,头文件有.hpp .hxx .h。由此可见c++是一个c的超集, c++完全兼收了c的语法特性和标准库,所以c++编译器完全可以正常编译一个c程序。

            虽然c++程序可以支持c形式包含头文件的方式并直接使用库中的函数,如stdio.h,他并不是源生支持,而是这是c++做了很多额外工作,来兼容的。所以c++并不建议我们以c的写法去包含原来c的头文件,而是推荐使用c++的库,如<cstdio>来代替<stdio.h>,没错没有扩展名,在c++中所有的标准库都没有后缀扩展名,如.h。

            ubuntu中gcc的工具链的头文件在/usr/include 在当前目录下还有一个c++的文件夹,存放的全是g++工具链的头文件。

    iostream引用

    iostream是c++的常用标准库之一,内部包含了很多我们常用的函数,为了防止库与我们自定义的名称冲突,所以他也使用了命名空间,封装的命名空间名称为std。std的声明在iostream头文件中,与众不同的是这个头文件的包含不需要.h,直接#include<iostream>头文件即可,既然是命名空间,那么我们要使用std命名空间的元素,如cout就需要std::cout。由于对该头文件内的东西频繁使用,所以我们一般,直接将整个命名空间进行声明如:

    using namespace std;        //声明库中的命名空间,
    cout << “hell word” << endl  //调用其内部元素cout

    标准输出cout

            cout标准输出,对应stdout,在std命名空间中。结合 <<(流操作)进行输出,可多节连接。cout涉及的头文件有<iostream> <iomanip>,iostram还生了两个儿子就是ostram(输出)和istram(标准输入),iomanip内部是一些格式化,如输入输出的对齐。

            cout本质上是ostream(iostream派生类)的一个对象,暂时我们先将类简单理解成类型,对象理解成变量。也就是说cout其实是在iostream中事先定义的一个变量。

            操作符 << 本质上是c语言中的左移,在iostream中进行了运算符重载(把符号功能进行了重新定义)。

    示例:
    int val=8;
    cout << “hello word” << val << endl

            我们可以把cout看成是一个输出设备,把<<看成箭头,大概意思就是把字符串按箭头方向送到cout设备即可实现输出。endl与cout一样都是std命名空间中的一个对象,我们可简单的把他理解成是\n\r的一个替代。实际上我们同样可以就就写<</n,但是这是c的语法,我们在c++中一般不用。val是一个我们要输出值的变量。多个<<符号可以进行级联。

    流操作格式化

    流操作格式化一般使用“流操作算子”,常用的操作符见下表,他们都是在iomanip头文件中,要使用必须包含该头文件。

    流操纵算子

    作  用

    dec(默认)

    以十进制形式输出整数

    hex

    以十六进制形式输出整数

    oct

    以八进制形式输出整数

    fixed

    以普通小数形式输出浮点数

    scientific

    以科学计数法形式输出浮点数

    left

    左对齐,即在宽度不足时将填充字符添加到右边

    right(默认)

    右对齐,即在宽度不足时将填充字符添加到左边

    标准输入cin

            cin是c++中的标准输入,也是iostream头文件中定义的std命名空间。实际上标准输入与标准输出有很多点相类似,如上表的格式也同样适用于输入,数据流符号位>>右移符号,无论是输出还是输入,cout和cin都在左边,我们的变量或要操作的内容在右边。同样输入时也具有接续效果,使用变量去接收输入参数示例如下:

    int a,b;
    cin >> hex >> a >>b;

            cin是输入的函数,hex是以十六进制接收,a和b是去接收用户输入的两个变量,第一个输入参数放在a中,第二个放在b中,用户输入时数字间使用空格隔开,输入空格时cin认为是一个结束符号。如果输入了3个数字,由于没有接收变量,cin会把第3个数字丢了。

    c++库函数查询

    在c学习过程中我们经常使用man指令进行函数查询,而c++的库ubuntu并没有自带,需要我们自己进行安装,然而我们并不推荐使用man手册查询,因为c++的库比较复杂,在man手册中查询并不是很好用,我们推荐使用网络资源进行查询,如下网站。

    cppreference.com

    fstream读写文件

            file stream简称fstream,是c++中用来读写流式文件的一个类,功能与c中的fopen、fclos类似,实际上我们对文件的操作仍然离不开c中的操作函数,只不过c++进行了重新封装。fstream本质上是一个class,这个class中提供了一系列的文件操作函数。

    open函数

    • 功能:将名为 filename 的文件打开并与文件流关联。
    • 原型:void open( const char *filename, ios_base::openmode mode = ios_base::in );
    • 参数:filename -  要打开的文件名

                    mode  -     指定打开模式。它是位掩码类型,定义下列常量:

                    app 每次写入前寻位到流结尾

                    binary     以二进制模式打开

                    in    为读打开

                    out  为写打开,如果文件不存在自动创建

                    trunc      在打开时舍弃流的内容

                    ate  打开后立即寻位到流结尾

    • 返回值:无
    • 示例:fstream fs;
    fs.open(pach);   //打开文件

    is_open函数

    • 功能:检查文件流是否有关联文件,检查是否打开成功。
    • 原型:bool is_open(void);
    • 参数:无
    • 返回值:若文件流有关联文件,则为 true ,否则为 false
    • 示例:if(fs.is_open()==true)//打开成功

    close函数

    • 功能:关闭打开的文件
    • 原型:void close();
    • 参数:无
    • 返回值:无
    • 示例:fs.close();  //关闭文件

    read函数

    • 功能:读取文件
    • 原型:basic_istream& read( char_type* s, std::streamsize count );
    • 参数:   s      -     指向要存储字符到的字符数组的指针

                    count     -     要读取的字符数

    • 返回值:*this
    • 示例:char read_buff[20]={0};

    fs.read(read_buff,sizeof(read_buff));

    write函数

    • 功能:读取文件
    • 原型:std::basic_ostream<CharT,Traits>::write
    • 参数:s  -     指向要写入的字符串的指针

                    count  -     要写入的字符数返回值

    • 返回值:*this
    • 示例:
    • fs.write(write_buff,sizeof(write_buff));
      fs << "hello word" << endl;

    skeep函数

    • 功能:移动文件指针
    • 原型:seekp (int offset, int mode)
    • 参数:offset—基于mode的偏移量,可正可负。

                    mode—参考点,beg表示文件开始,end表示文件尾,cur表示指针的当前位置。

    • 返回值:
    • 示例:fs.seekp(0,fs.beg);//移动到文件头

    C++字符串

            c++字符串关键字string,是c++库中的一个类,该类是STL中basic_string模板实例化得到的一个模板类。在string这个类中有很多的成员函数,这些函数都是用来处理字符串的,我们每定义一个字符串对象如string s1,那么就可以基于对象来调用成员函数来操作s1,如s1.swap(s2),就是将s1与s2的内容进行交换。

    c++的字符串与c的字符串对比

            c语言严格的说是没有字符串的,我们之前用的准确的说应该叫字符数组、字符指针,有无字符串主要是看是否有字符串类型,如都有int类型,而c++或java是真的有字符串这个类型,而且为此还提供了很多关于字符串操作的函数。所以在我们c++开发的时候,要使用c++的字符串类型,而不是使用c中的字符数组。

    string函数构造

    string构造函数的方法有多种,如:

    • string s1   //看起来有点像是定义一个对象
      string s1()  //和上一个类似,但初值不同,初值为1;
      string s1(“hello word”)//在构造时赋值,类似于定义变量时赋初值。
      string s1(4,’x’)   //初值为4个字符X

    需要注意的是我们给初值时不能给初值为数字,如string s1(123);也不能给单个字符,如string(‘x’),编译时报错的数量会让你怀疑人生。起码会让你从疲惫中被吓清醒。

    string赋值

    赋值很简单,和c中对字符指针赋值类似,如下:

    string s1;
    s1 = “hello word”
    s1 = ‘h’

    获取字符串长度

            获取长度也是用string的成员函数length和size,值得注意的是size是内存空间大小,虽然每个字符默认占1个字节,实际上我们是可以通过成员函数去改变,所以length与size有时候输出结果相同,但有时候是不同的。语法:

    string s1(hell word);
    i=s3.length(); 
    y=s3.size();

    字符串拼接

            字符串的拼接很简单,可以直接使用+和+=,这种方法和两个变量求和很像,这都是c++的的封装和对运算符重载的结果,这种方式在c中简直都不可想象。没办法c++就是这么强大。

    string s1(“1234”);
    string s2(“789”);
    string s3
    s3 = s1 + s2;
    s1 +=s2;

    字符串比较

    字符串的比较也非常简单,直接像变量一样使用!=、==、等符号即可实现。

    string s1(“1234”);
    string s2(“789”);
    if(s1==s2)

    混合编程

            c有很多优秀且成熟的项目和库,丢了可惜,重写没必要,所以在c++中有时候需要调用c的代码,另外就是在一个非常庞大的项目中,如操作系统,他的底层很注重运行效率,应用层很注重开发效率,所以需要使用不同的语言进行混编。

            无论是c还是c++最终都会编译成.o文件,在.o文件中我们几乎无法通过对文件本身来判断源文件是c还是c++在.o文件中仅有一些符号和二进制可执行代码,所以链接的时候完全可以对他们进行相互组合,实际上两种语言的.o文件也并不是可以无缝链接的,c++支持函数名重载而c不支持,函数名重载其实就是函数名在.o文件中的表达不一样,c的.o中的函数名就是源文件的函数名,而c++的.o中的函数名是函数名后自动添加的传参类型的首字母,如void func(int a,int b),在c++的.o中的函数名称是funcii,所以在链接的时候链接不上。

            解决这个问题的关键就是要让c++编译后的变量名与c相同,在c++中为我们提供了extern “C”的机制,来告诉编译器,函数名使用c的规则来命名。示例如下:

    #ifdef __cplusplus   //该变量是c++编译器自动添加的
    extern “C”
    {
    #endif
    void func(void);     //函数声明
    # ifdef __cplusplus
    }
    #endif

            上例中只要在extern “C”的大括号内的函数声明,在c++编译器编译的时候,函数名都会按照c的标准来进行函数名重载,即中间函数名与源文件函数名相同。extern “C”是c++的语法,如果c的编译器去编译就会报错,为了提高我们的文件可移植性,即可以使用c编译器又可以使用c++编译器,所以使用了#ifdef,如果是c编译器编译,__cpluspls这个变量根本就没有所以extern根本就不会被编译进去,自然就不会报错。所以我们用c写标准程序时一定要添加extern “C”来保证我们程序的移植性。

    c静态库与c++源文件混编

            这种情况通常出现在供应商给我的是动态库或静态库是(含.a和.h)基于c的,如果供应商给我们的.h文件中没有添加extern “C”来兼容c++的编译,我们使用g++再次混编时,会把.o文件内的函数名重载,导致.h中的函数声明是错误的,我们去调用也会失败,解决方案是,我们可以在自己的c++源文件中包含供应商的头文件时添加extern“C”,当然也可以添加到对方的.h文件中,示例如下:

    extern “C”
    {
    include “xxx.h”
    }

    c++静态库与c源码混编

            这种情况同样也有可能是别人给你的库文件已经按c++的方式编译了,我们要在c中调用,首先的问题是我们不知道.hpp文件在.o中函数重载后的函数名称,所以我们无法调用,有一个投机的方法就是把.o文件反汇编,就可以看到函数名,然后在c中调用即可。

            然而这样做不正规,如果函数较多,我们需要一个一个的核对,容易出错。

            正规的解决方案是把.o库进行再次封装,写一个c++源文件,在文件中为.h中的每一个函数建一个别名函数,来调用库中的函数,这样我们就得到了库中每个函数的别名,再在我们新建的头文件中去添加extern “C”来使其按c标准进行函数重载,编译后得到另外一个库,我们的c程序就可去调用我们新建的库来实现间接调用源库函数。

    gcc man.c  -lpack -ltest  -L./cplus  //库中库的引用的顺序错误会出现链接失败,要先上
                                         //级库后 下级库,即被库调用的库应该排在后面。

     

    反编译方法

    linux下反编译在学习c的时候已讲过,然而我们视乎已经忘了,所以在此重提,步骤如下:

    gcc 1xxx -c -o 2xxx.o       //将1xxx只编译不链接,命名为2xxx.o
    objdump -d 2xxx.o > 3xxx.i  //将2xxx.o文件反编译成.i文件。

    .o文件内部全部是二进制,本身也带有符号信息,只是我们看不懂二进制,所以要使用反编译器将其转换成我们能看懂的格式。

    制作静态库与使用

    gcc 1xxx -c -o 2xxx.o    //将1xxx只编译不链接,后文件名命名为2xxx.o
    ar -r lib1xx.a  2xxx.o  //ar是工具链,-r静态库,lib1xxx.a库名,lib开头。
    g++  main.cpp  -l1xxx -L.  //-l指定库名,-L指定当前路径

    展开全文
  • iostream.h与iostream的区别: iostream.h里面定义的所有类以及对象都是在全局空间里,所以可以直接用cout 。但在iostream里面,它所定义的东西都在名字空间std里面,所以必须加上 using namespace std;才能使用...

    iostream.h与iostream的区别:

    1. iostream.h里面定义的所有类以及对象都是在全局空间里,所以可以直接用cout 。但在iostream里面,它所定义的东西都在名字空间std里面,所以必须加上 using namespace std;才能使用cout。(C++中一个带“.h”扩展名的库文件,比如iostream.h,在新标准后的标准库中都有一个不带“.h”扩展名的相对应,区别除了后者改进很多之外,还有一点就是后者很多东西都定义在“std”名字空间中。)
    2. iostream要使用更新的编译器(其实大部分编译器都支持,除了某些搞嵌入式的编译器)。
    3. iostream是C++的头文件,iostream.h是C的头文件。标准的C++头文件没有.h扩展名,将以前的C的头文件转化为C++的头文件后,有时加上c的前缀表示来自于c,例如cmath就是由math.h变来的

    string.h与string的区别:(遇到的问题最直观的就是:string.h的定义里并无类,如果string str就会报错/CE)
    在这里插入图片描述

    1. 这个问题比起上一个的iostream又比较特别,问题在于C++要兼容C的标准库,而C的标准库里碰巧也已经有一个名字叫做“string.h”的头文件,包含一些常用的C字符串处理函数,比如strcmp, 这个头文件跟C++的string类半点关系也没有,所以并非<string.h>的“升级版本”,它们是毫无关系的两个头文件,所以要使用string类还是要加上这个头文件。
    展开全文
  • 详解iostream

    2012-08-14 23:53:29
    我们从一开始就一直在利用C++的输入输出在做着各种练习,输入输出是由iostream库提供的,所以讨论此标准库是有必要的,它与C语言的stdio库不同,它从一开始就是用多重继承与虚拟继承实现的面向对象的层次结构,作为...
  • C++中的iostreamiostream.h

    千次阅读 2018-08-24 15:15:54
    iostream.h&gt;与&lt;iostream&gt;这两个库就是C++ 标准化前/后的两个库,现在都在并行使用。用 .h 包含的是C++ 标准化之前的库 ,不带 .h 的是C++ 标准化(C++ 98)之后的头文件,对于普通用户来说这...
  • C++的iostream标准库介绍+使用详解

    千次阅读 多人点赞 2019-08-30 18:18:22
    文章目录为什么需要iostream1. iostream: istream 和 ostream2 fstream: ifstream 和 ofstream3. strstream: ostrstream 和 istrstream4. stringstream5. io_state 输入/输出的状态标志 为什么需要iostream 我们从一...
  • 修复资源【iostream

    2022-04-13 17:59:48
    iostream是c++输入输出的最基本的文件,没有它基本上c++就完犊子了 拖到C:\Program Files(x86)\Dev-Cpp\MinGW64\lib\gcc\x86_64-w64-mingw32\4.9.2\include\c++再编译即可修复
  • iostream.h>区别为:来源不同、命名空间不同、移植不同 一.来源不同 1、include<stdio.h> :include<stdio.h> 是C标准库里面的函数库,对应的基本都是标准输入输出等C语言常用库的定义。 2、...
  • 'iostream' file not found 解决方案
  • C++ std iostream

    2022-01-23 20:27:24
    #include <iostream> using namespace std; int main(){ cout << "Hallo world!"; } std 为 sdandard, 为标准库。 还有cin,详见下方。 int num; cin >> num; int num为声明变量。
  • 有关iostreamiostream.h iostreamiostream.h在接口和执行上不同。 link 这里按照我的需要记录一下: 1、一般新代码中使用iostream,但如果处理过去的代码,可以使用iostream.h表示继承,以保持代码一致性。 2、...
  • 本文主要记录C++中的iostream头文件和命名空间的内容,包含cin和cout的运行原理,std::cin和cin还有std::cout和cout之间的差别,并针对它们的使用方法展开拓展。
  • iostream头文件的作用是什么

    千次阅读 2021-05-18 13:41:02
    iostream头文件包含了操作输入输出流的方法,比如读取一个文件,以流的方式读取;其作用是:让初学者有一个方便的命令行输入输出试验环境。iostream的设计初衷是提供一个可扩展的类型安全的IO机制。本教程操作环境:...
  • #include<iostream>
  • IOStream.png

    2021-07-03 16:41:17
    自己上网搜的io参考人家的
  • C++学习(一)iostreamiostream.h和stdio.h的区别 iostreamiostream.h和stdio.h的区别 stdio.h属于C语言的标准I/O库,是以函数的方式向buffer写入或读取字符。 其输入表达为:scanf(…) , 输出为:printf(…) ...
  • iostream> using namespace std; 学过C语言的同学在学习C++的时候是否会产生这样的疑惑呢: 练习C语言编程的时候,只需要声明一个头文件:#include<stdio.h>.而为什么在C++中,却需要写出include<...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,201,574
精华内容 880,629
关键字:

iostream

友情链接: FIFO.zip