Essential C++第一章练习(干货很多,可让小白耳目一新)

  • object n.对象(在C++中)
  • string类型的字符串,求长不可以用cstring头文件里的strlen(),而是要用变量名.length()!!!变量名.size()也可以!!!
    然后.length()或者.size()这个函数返回一个整型值(string类型字符串的长度)
  • 由于vector是标准库,而数组则是内置类型。所以如果你追求程序的执行效率的话那就用数组吧。
  • 可确定数组元素个数的时候尽量使用数组。 对于指针以及NEW操作符迷糊的时候使用vector**,因为它内置有内存管理器。
  • 关于#include<iomanip>,iomanip是I/O流控制头文件。
    其中我遇到了这个头文件的一个有用的函数,名为setw();
    setw( n)函数的设置字段宽度为n位。setw(int n)只是对直接跟在<<后的输出数据起作用,而在之后的<<需要在之前再一次使用setw当后面紧跟着的输出字段长度小于n的时候,在该字段前面用空格补齐;当输出字段长度大于n时,全部整体输出。(这是针对在c!o!u!t!<!<!后的setw()的作用
    setw(n)一般是这样用,setw()函数写在前头后面跟一个变量。
    cin >> setw( nm_size ) >> user_name;
    其中nm_size是咱们设定的一个整型变量,user_name可以是字符串(string型的或者C风格型的),然后你输入的user_name字符串的长度(多少个字符)不能超过nm_size限制的长度,多出来的长度都给咔咔截掉,只保留nm_size个字符。这是针对在c!i!n!>!>!后的setw()的作用)
    eg.运用实例:
    在这里插入图片描述
    在这里插入图片描述
    仅供参考,作为对比,咱们可以知道了setw()函数的不同用法,就是这样的!
    结合这个例子咱不难明白了setw(n)这个用法。
  • 与c风格的字符串不同,array数组没有表示其结束的标记值(null)。
    array是一个内置数组
  • C++初学者建议用vector类
  • 关于push_back()函数,可以用在vector上,比如
vector<int> ivec;
int ival;
while ( cin >> ival )
	ivec.push_back( ival );
	//...

在读取了用户输入的数时,push_back函数把数直接安排在vector类的尾部,也就是说相当于在当前(动态)数组存储的最后一个元素后头插进这个数
string类也有这个函数,用法一样。

  • .size()函数也可以用于vector上,作用是求vector的长度
const int array_size = 128;
int ia[ array_size ];
int ival, icnt = 0;
while ( cin >> ival && icnt < array_size )
	ia[ icnt++ ] = ival;

这个代码的思想可以控制array里的数据不会越界(要越界了立即停止输入数据进array

  • 关于文件的读写,自己先练一练手(多余的头文件给1.7练习做准备)
#include<iostream>
#include<string>
#include<algorithm>
#include<vector>
#include<fstream>
using namespace std;
int main()
{
    string name1,name2;
    cin>>name1>>name2;
    ofstream outfile("1-7.txt",ios_base::app);
    if(!outfile)
    {
        cerr<<"Cannot open this file!";
    }
    else
    {
        outfile<<name1<<name2<<endl;
    }
    ifstream infile("1-7.txt");
    if(!infile)
    {
        cerr<<"Cannot open this file!";
    }
    else
    {
        string a;
        while(infile>>a)
        {
            cout<<a;
        }
    }
    return 0;
}

结果:
在这里插入图片描述
在这里插入图片描述

  • 关于vector类的string型变量的定义vector<string>text;
  • 注意ifstream,ofstream不要写错了,然后一些马虎问题要注意好。
  • 程序也可以手动任意地方停止,如图所示
int main()//矫正的版本
{
    ifstream infile("1-7.txt");
    if(!infile)
    {
        cerr << "oops! unable to open input file\n";
        return -1;
    }
    ofstream outfile("1-7out.txt");
    if(!outfile)
    {
        cerr << "oops! unable to open input file\n";
        return -2;
    }
    //...
}

如果走了if,不管是走上面的还是下面的if,然后走到return的时候,主函数返回一个值,程序结束。就这样,程序可以人为地提早停止掉。注意这种写法,尤其是应对非!法!输!入!或者非!法!操!作!的时候

  • 使用vector或queue等时,尤其需要注意用size()函数时,由于size()函数返回的是一个unsigned int类型的变量。因此该返回值不能和负数比较大小
for (int ix = 0; ix < text.size(); ix ++)
{
    outfile << text[ ix ] << ' ';//同样方式输出到指定文件里去
}

这里整型数ix和无符号整型数比较了大小,编译器此时会提出警告:
在这里插入图片描述

  • string err[num_err];这样来定义一个string类型的数组

第一章就此完结撒花~奥力给!

发布了18 篇原创文章 · 获赞 1 · 访问量 241

猜你喜欢

转载自blog.csdn.net/weixin_45910408/article/details/105341679