iostream库到底是什么?存放在哪里?

6 篇文章 0 订阅

首先看百度百科:

那么这个库到底是什么?总感觉很神秘、和我们平常写的程序不一样,摸不着看不见的感觉。

下面我们就通过vs2010来定位这些神秘的c++库。看看他们到底长啥样~


首先 编写一个最简单的helloworld程序。

让光标放在iostream上,点击右键,点击“打开文档<iostream>”,

就打开了这个所谓的iostream库了,如果还嫌不够具体明白,那么可以:

 右键上图红框,点击“打开所在的文件夹”。

可以看到,iostream就是一个普通文件,没有后缀名,但是我们可以通过记事本打开,实际上有没有后缀名并无任何影响,只不过windows通过后缀名来分配打开软件而已。所以可以认为这个iostream就是一个纯文本文件,从这个意义上说,和我们自己写的.cpp并没有区别,他和其他库文件被放在一个合适的目录下,当我们在程序中将其名称include之后,ide就会将其内容替换成为实际的纯文本,这样就相当于在每一个用到的程序中,都重写了一遍程序库,换句话说,我们可以不include,我们可以手动将#include的内容(例如本例中的iostream内容)复制到helloworld的最前面,这样我们同样可以运行helloworld。

实际正是如此,于是你可能觉得自己可以手写一个iostream了?以后不用include了?但是当你准备开始造轮子的时候,会突然发现这个iostream库里面也#include了别的库,例如istream,而istream里面又include了ostream,依次往下,也就是说一个库的编写可能使用了多个别的库,每次使用都要include,所以这就形成了越来越完善、越来越方便的库。

到这里,很容易发现其实所谓的库,和我们普通的代码没有任何区别,这也是为什么我们经常也会写一个.h和.cpp然后自己include一下,我们写程序,其实最终在逻辑上,是要的 “一个” 代码文件,一个程序,如何将实际上的多个文件集成到一起呢?就是通过include。我一个#include<iostream>,就可能将几万行代码都包含到我这个helloworld里面了。如果是我自己写的100行的工具类,我自己在另一个文件中#include一下,从最终效果上说就是将这100行的代码复制到了这个文件中。

所以说#include是很重要的,也体现了一门语言的博大精深。

最后,iostream是什么?

我用最浅显但不一定准确的话来说就是: iostream是一个由C++大佬们写好的、公认的、通用的代码文件,利用它可以实现一些输入输出相关的功能。而实现的过程,可能又使用了一些其他(可能包括自己)大佬们写好的、公认的、通用的代码。如此迭代下去,直至最原始的代码,可能有汇编、C语言等。

以上其实只是介绍了C++库的概念。

一个很容易想到的问题是: 上面所述似乎只涉及.cpp文件,那么.h文件起到了什么作用呢?这个我暂时也没太懂,准备研究一下,如果有大佬给出合适易懂的教程就太感谢啦~

 

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
这个示例代码没有将账户信息存放文件中,而是使用了STL中的`map`来存储用户信息,所以程序在运行结束后,用户信息会被清空。 如果需要将用户信息存放文件中,可以在程序中使用文件输入输出操作。具体实现可以在注册和登录函数中增加文件读写操作,将用户信息存储到文件中,或从文件中读取用户信息进行验证。下面是一个简单的示例: ```cpp #include <iostream> #include <fstream> #include <string> #include <map> using namespace std; map<string, string> userDatabase; // 存储用户信息的数据 bool isRegistered(string username) { // 判断用户是否已注册 return userDatabase.find(username) != userDatabase.end(); } bool registerUser(string username, string password) { // 注册新用户 if (isRegistered(username)) { return false; // 用户名已存在 } userDatabase[username] = password; // 写入用户信息到文件中 ofstream userFile("users.txt", ios::app); // 以追加模式打开文件 if (userFile.is_open()) { userFile << username << " " << password << endl; userFile.close(); return true; } else { return false; } } bool login(string username, string password) { // 用户登录 if (!isRegistered(username)) { return false; // 用户名不存在 } return userDatabase[username] == password; } void loadUsersFromFile() { // 从文件中读取用户信息 ifstream userFile("users.txt"); if (userFile.is_open()) { string username, password; while (userFile >> username >> password) { userDatabase[username] = password; } userFile.close(); } } int main() { loadUsersFromFile(); // 从文件中读取用户信息 bool running = true; while (running) { int option; cout << "请选择操作:\n"; cout << "1. 注册\n"; cout << "2. 登录\n"; cout << "3. 退出\n"; cin >> option; if (option == 1) { string username, password; cout << "请输入用户名:"; cin >> username; cout << "请输入密码:"; cin >> password; if (registerUser(username, password)) { cout << "注册成功!\n"; } else { cout << "注册失败!\n"; } } else if (option == 2) { string username, password; cout << "请输入用户名:"; cin >> username; cout << "请输入密码:"; cin >> password; if (login(username, password)) { cout << "登录成功!\n"; } else { cout << "用户名或密码错误!\n"; } } else if (option == 3) { running = false; } else { cout << "无效的选项!\n"; } } // 把用户信息写入文件 ofstream userFile("users.txt", ios::trunc); // 以覆盖模式打开文件 if (userFile.is_open()) { for (auto& user : userDatabase) { userFile << user.first << " " << user.second << endl; } userFile.close(); } return 0; } ``` 在这个示例中,我们增加了一个`loadUsersFromFile`函数,用于从文件中读取用户信息。在注册新用户时,我们将用户信息写入到文件中。在程序结束前,我们将用户信息写回到文件中。这样程序在下次运行时,就可以从文件中读取用户信息,并继续运行。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值