c++基础(1)

本文通过几个示例展示了C++编程语言的一些核心概念和技术,包括基本的输入输出操作、使用vector容器、迭代器的运用、数组操作、指针的使用、动态数组的创建、移位操作符的优先级及函数如何改变指针所指向的数据。
重读c++ primer, 学习细节。
  1. #include <iostream>
  2. using namespace std;
  3. int main()
  4. {
  5. int sum=0, value;
  6. while(cin>>value)
  7. sum+=value;
  8. cout<<"Sum is:"<<sum<<endl;
  9. return 0;
  10. }
#include <iostream>

using namespace std;

int main()
{
	int sum=0, value;
	while(cin>>value)
		sum+=value;
	cout<<"Sum is:"<<sum<<endl;
	return 0;
}

第8行,while条件测试输入操作符的返回结果,测试std::cin。遇到文件结束符(end-of-file)或遇到无效输入时,如读取了一个非整数的值,则失败。

  1. #include <iostream>
  2. #include <vector>
  3. using namespace std;
  4. int main()
  5. {
  6. vector<int> ivec;
  7. for(vector<int>::size_type ix=0; ix!=10; ++ix)
  8. {
  9. ivec.push_back(ix);
  10. }
  11. for(vector<int>::size_type ix=0; ix!=ivec.size(); ++ix)
  12. {
  13. cout<<ivec[ix]<<endl;
  14. }
  15. return 0;
  16. }
#include <iostream>
#include <vector>

using namespace std;

int main()
{
	vector<int> ivec;
	for(vector<int>::size_type ix=0; ix!=10; ++ix)
	{	
		ivec.push_back(ix);
	}
	for(vector<int>::size_type ix=0; ix!=ivec.size(); ++ix)
	{
		cout<<ivec[ix]<<endl;
	}
	return 0;
}

vector的简单用法。

  1. #include <iostream>
  2. #include <vector>
  3. using namespace std;
  4. int main()
  5. {
  6. vector<int> ivec;
  7. for(vector<int>::size_type ix=0; ix!=10; ++ix)
  8. {
  9. ivec.push_back(ix);
  10. }
  11. for(vector<int>::iterator iter=ivec.begin(); iter!=ivec.end(); ++iter)
  12. {
  13. cout<<*iter<<endl;
  14. }
  15. return 0;
  16. }
#include <iostream>
#include <vector>

using namespace std;

int main()
{
	vector<int> ivec;
	for(vector<int>::size_type ix=0; ix!=10; ++ix)
	{	
		ivec.push_back(ix);
	}
	for(vector<int>::iterator iter=ivec.begin(); iter!=ivec.end(); ++iter)
	{
		cout<<*iter<<endl;
	}
	return 0;
}

迭代器iterator的使用。

  1. #include <iostream>
  2. using namespace std;
  3. int main()
  4. {
  5. const size_t array_size = 10;
  6. int ia[array_size];
  7. for(size_t ix=0; ix!=array_size; ++ix)
  8. ia[ix]=ix;
  9. for(size_t ix=0; ix!=array_size; ++ix)
  10. cout<<ia[ix]<<endl;
  11. return 0;
  12. }
#include <iostream>

using namespace std;

int main()
{
	const size_t array_size = 10;
	int ia[array_size];
	
	for(size_t ix=0; ix!=array_size; ++ix)
		ia[ix]=ix;
	for(size_t ix=0; ix!=array_size; ++ix)
		cout<<ia[ix]<<endl;
	return 0;
}

数组下标的正确类型是size_t。

  1. #include <iostream>
  2. using namespace std;
  3. int main()
  4. {
  5. int ival = 1024;
  6. int *piv = &ival;
  7. int **ppiv = ϖ
  8. cout<<ival<<endl<<*piv<<endl<<**ppiv<<endl;
  9. return 0;
  10. }
#include <iostream>

using namespace std;

int main()
{
	int ival = 1024;
	int *piv = &ival;
	int **ppiv = ϖ
	cout<<ival<<endl<<*piv<<endl<<**ppiv<<endl;
	return 0;
}

指向指针的指针。

  1. const double a = 3.14;
  2. double *pa = &a; //error, pa is a plain pointer
  3. const double *pb = &a;//ok, a pointer to const
  4. //指向const对象的指针,不允许用指针来改变其所指的const值。
  5. //但可以使其指向别的对象。
  6. int errNumb = 0;
  7. int *const curErr = &errNumb;
  8. //const指针,const指针的值不能修改,意味着不能使curErr指向其他对象。
	const double a = 3.14;
	double *pa = &a;	//error, pa is a plain pointer
	const double *pb = &a;//ok, a pointer to const
	//指向const对象的指针,不允许用指针来改变其所指的const值。
	//但可以使其指向别的对象。

	int errNumb = 0;
	int *const curErr = &errNumb;
	//const指针,const指针的值不能修改,意味着不能使curErr指向其他对象。

  1. //创建动态数组
  2. int *pia = new int[10];//arrays of 10 uninitialized ints
  3. int *pia2 = new int[10]();//arrays of 10 initialized ints, all 0
//创建动态数组
	int *pia = new int[10];//arrays of 10 uninitialized ints
	int *pia2 = new int[10]();//arrays of 10 initialized ints, all 0
  1. //移位操作符具有中等优先级:
  2. //其优先级比算术运算符低,但比关系运算符、赋值操作符和条件操作符优先级高。
  3. cout<<42+10;//ok
  4. cout<<(10<42);//ok
  5. cout<<10<42;//error
	//移位操作符具有中等优先级:
	//其优先级比算术运算符低,但比关系运算符、赋值操作符和条件操作符优先级高。
	cout<<42+10;//ok
	cout<<(10<42);//ok
	cout<<10<42;//error
  1. #include <iostream>
  2. using namespace std;
  3. void reset(int *ip)
  4. {
  5. *ip = 0;//改变ip所指向的int值
  6. //ip = 0;//仅仅改变ip的局部变量,对外界无影响
  7. }
  8. int main()
  9. {
  10. int i = 42;
  11. int *p = &i;
  12. cout<<"i:"<<*p<<endl;
  13. reset(p);
  14. cout<<"i:"<<*p<<endl;
  15. return 0;
  16. }
#include <iostream>
using namespace std;

void reset(int *ip)
{
	*ip = 0;//改变ip所指向的int值
	//ip = 0;//仅仅改变ip的局部变量,对外界无影响
}

int main()
{
	int i = 42;
	int *p = &i;
	cout<<"i:"<<*p<<endl;
	reset(p);
	cout<<"i:"<<*p<<endl;

	return 0;
}


结果:

i:42

i:0

  1. #include <iostream>
  2. using namespace std;
  3. void reset(int *ip)
  4. {
  5. //*ip = 0;//改变ip所指向的int值
  6. ip = 0;//仅仅改变ip的局部变量,对外界无影响
  7. }
  8. int main()
  9. {
  10. int i = 42;
  11. int *p = &i;
  12. cout<<"i:"<<*p<<endl;
  13. reset(p);
  14. cout<<"i:"<<*p<<endl;
  15. return 0;
  16. }
#include <iostream>
using namespace std;

void reset(int *ip)
{
	//*ip = 0;//改变ip所指向的int值
	ip = 0;//仅仅改变ip的局部变量,对外界无影响
}

int main()
{
	int i = 42;
	int *p = &i;
	cout<<"i:"<<*p<<endl;
	reset(p);
	cout<<"i:"<<*p<<endl;

	return 0;
}

结果:

i:42

i:42

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值