ACM小问题总结

第一个问题

数据输入问题:

       (1)简单输入两个整数相加

               如输入:

               1 2

               4 5

               输出:

              3

              9

             C语言:

              while(scanf("%d%d",&a,&b)!=EOF)

                       printf("%d",a+b);

              解释:

             如果被a,b成功读入两个整数则scanf返回2,如果只成功读入一个则返回1,如果都没有成功读入则返回0,如果到达文件尾部则返回EOF.

             C++:

             while(cin>>a>>b)

            解释:

           cin读入成功则返回一个输入类的对像,否则返回NULL。

       (2)从文件中读入数据

#include<iostream>
#include<fstream>
using namespace std;

//从文本中读单个单词直到文件尾部
void readWord()
{
	string s;
	ifstream infile;
	infile.open("test.txt");
	//或者
	//ifstream infile("test.txt");
	if(!infile)//检查是否打开成功
	{
		cerr<<"Error"<<endl;
	}
	while(infile>>s)
		cout<<s<<endl;
}

//从文本中读按行读取字符串
void readLine()
{
	string s;
	ifstream infile;
	infile.open("test.txt");
	//或者
	//ifstream infile("test.txt");
	if(!infile)//检查是否打开成功
	{
		cerr<<"Error"<<endl;
	}
	while(getline(infile,s))
		cout<<s<<endl;
}

 

(2)C++中string类和vector容器

          string类的对象可以存储长度任意的字符串。可用下标对字符串中的每个字符进行操作,下标的类型不是int 而是string::size_type,有与int相同的操作方式。string类提示了多个操作函数,如s.size()返回字符串的长度,返回值为string::size_type型,如s.empty()确定一个string对象中否为空。另string类还提供了+,==,!=等操作这些操作具体原来操作功能。string类还提供了针对字符串的单个字符的操作如:isupper(c)判定c是否是大字字母。

         vector容器,不是一个数据类型而是一个模板,存放若干个同一种数据类型的数据。其最大的特点是可以动态的增加长度。并在声明时就需要提供是存放哪种数据类型的容量。如vector<int>是存放int的容器。几个重要的函数:v.push_back(t)向容量v中增加元素t,v.empty()确定是否为空, v.size()返回容器的长度,返回值类型为vector<*>::size_type。*为某一数据类型。

        注:在使用size_type的时候要注意,由于size_type是一个无符号数,只有正数没有负数。如有for(string::size_type i=s.size();i>=0;i--)这样的表达中就是错误的,由于i是一个正数,当其自减为负数时,又变成正数,则上面的那个循环就不会停止,则无限循环。 一个改进的方法为把string::size_type强制成int,即static_cast<int>(s.size())。    

 

(3)iterator迭代器类

     C++中的标准容器都定义了自己的迭代器类,迭代器有二个层面的意思:1:指的是具体的迭代器类。2:指的是一种操作的意思只要能遍历容器的类都可以认为是迭代器类。对迭代的赋值如:vector::iterator iter=v.begin()或v.end()。这里返回的是迭代器的,而不是和v.size()一样返回的是一个vector::size_type类的值。迭代器能进行的操作有自加操作和加减操作,其都是向容器前进几个单元,而不是其值加一。还有一个自解操作即:*iter就是对于iter里面的值进行的操作。另还有const_iterator,如有vector::const_iterator iter是指iter里的元素不能进行操作,而不是iter自身的值有变化。注:如果容器进行了插入操作,即其长度有所改变,则迭代器就不能再有效的进行操作了。
               

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值