ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

C++学习笔记

2022-05-13 15:00:07  阅读:147  来源: 互联网

标签:cout 笔记 years 学习 vector C++ year array 赋值


C++学习笔记

 

数组的替代选项---模板类vector、array

void test11()
{
	unsigned short n = 10;
	const unsigned short m =10;
	vector<int> vi;
	vector<double>vd(n);
	array<int, 5> ai;
	//m必须是常量,而不能是变量,可以是一个数值10,或者const unsigned int类型的变量
	array<double, m> ad = { 1.0,2.0,3.0,4.0 };

	//-------------------------------------

	double a1[4] = { 1.1,2.2,3.3,4.4 };//静态数组,必须在定义时指定长度
	//a1[-1] = -1.0;//错误,索引值超出索引范围0-3
	
	//double a2[];//错误,静态数组必须在定义时指定长度
	//double a2[4]=a1;//错误,应该使用{}初始化聚合对象
	//a2 = a1;//错误,应该使用{}初始化聚合对象
	vector<double> vd1={ 2.22,3.25,5.65,6.74 };
	vector<double>vd2{ 2.22,3.25,5.65,6.74 };//可以省略等号进行便捷初始化
	vector<double> vd3(4);//不能直接初始化
	vd3= { 2.22,3.25,5.65,6.74 };
	vector<double>vd4(3);
	vd4[0] = 1.23;
	vd4[1] = 3.22;
	cout << "vd4[0]		" << vd4[0] << endl;
	cout << "vd4[1]		" << vd4[1] << endl;
	cout << "vd4[2]		" << vd4[2] << endl;
	cout << "-------------------------" << endl;
	vector<double> vd5 = vd4;
	cout << "&vd4[i]	" << "&vd5[i]" << endl;
	cout << &vd4[0]	<<"	" << &vd5[0] << endl;
	cout << &vd4[1] << "	" << &vd5[1] << endl;
	cout << &vd4[2] << "	" << &vd5[2] << endl;

	array<double, 4> arr1{ 5.0,6.0,7.0,8.0 };
	//array<double, 5> arr2=arr1;//错误,必须长度相等才可以赋值
	//array<long double, 4>arr3 = arr1;//错误,必须类型相同才可以赋值
	array<double, 4>arr4 = arr1;
	cout << "-------------------------" << endl;

	cout << "&arr4[i]	" << "&arr1[i]" << endl;
	cout << &arr4[0] << "	" << &arr1[0] << endl;
	cout << &arr4[1] << "	" << &arr1[1] << endl;
	cout << &arr4[2] << "	" << &arr1[2] << endl;
}

运行结果

vector之间可以直接=赋值,赋值后的vector是原vector的一个拷贝;

array之间可以直接=赋值,必须满足两个条件

1、array长度必须相等;

2、元素类型必须完全相同;

赋值后的array是原array的一个拷贝;

指向指针的指针

struct years
{
	int year;
	bool isLeepYear;

};
void test10()
{
	years y1, y2, y3;
	y1.year = 1998;			//成员运算符,用变量名访问成员
	years* py = &y2;
	py->year = 1999;		//间接成员运算符,用指针访问成员
	years arry[3];		//结构体数组
	arry[0].year = 2003; arry[1].year = 2004; arry[2].year = 2005;

	cout<<"arry->year		" << arry->year << endl;
	cout << "arry[1].year		" << arry[1].year << endl;
	cout << "arry->year		" << arry->year << endl;
	cout << "-------------------------"<<endl;
	years* arryp[3] = { &y1,&y2,&y3 };//结构体指针数组
	cout << "arryp[1]->year		" << arryp[1]->year << endl;
	//数组元素本身是指针(指向结构体),
	//而数组名也是指针(指向数组的第一个元素),
	//所以这里的数组名是指向指针的指针years**
	years** ppa = arryp;
	auto ppb = arryp;
	cout << "-------------------------" << endl;
	cout << "(*ppa)->year		" << (*ppa)->year << endl;
	cout << "(*(ppb + 1))->year		" << (*(ppb + 1))->year << endl;
}

运行结果

字符串测试

typedef unsigned int uint;

char* getname()
{
	char temp[80];
	cout << "Enter name (less than 80 characters)" << endl;
	cin >> temp;
	uint len = strlen(temp);
	cout << "len=" << len << endl;
	//通过一个小的内存空间来存放输入,以节省内存
	char* pc = new char[len + 1];
	//len表示字符串中字符的个数,而没有包含字符串结束标识"\0"
	//字符串所占字节数应当包含结束标识"\0",所以为len+1
	//strcpy已过时弃用,这里使用更加安全的strcpy_s
	//第一个参数表示拷贝的目标指针,char*类型
	//第二个参数表示需要拷贝的字节数,包含结束标识"\0",所以为len+1,
	// rsize_t类型,rsize_t类型属于size_t类型,而size_t类型属于unsigned int类型
	// rsize_t类型实际就是unsigned int类型,二者等效
	//第三个参数表示需要拷贝的数据源const char*类型
	strcpy_s(pc, len+1, temp);
	return pc;

}

void test9()
{
	char* name;
	name = getname();
	cout << "name=" << name << "	name at=" << (int*)name << endl;
	//只能释放new的资源
	delete name;
	name = getname();
	cout << "name=" << name << "	name at=" << (int*)name << endl;
	//只能释放new的资源
	delete name;
}

运行结果

打开文件是否成功的测试

void test2()
{
	ifstream instream;
	instream.open("in.dat");
	string s = instream.fail() ? "fail" : "succeed";
	cout <<"instream.fail()?	" << instream.fail() << endl;
	cout << "instream.fail()?	" << s << endl;
	if (!instream.fail())instream.close();
	instream.open("inFile.dat");
	s = instream.fail() ? "fail" : "succeed";
	cout << "instream.fail()?	" << instream.fail() << endl;
	cout << "instream.fail()?	" << s << endl;
	if (!instream.fail())instream.close();
}

运行结果

文件流测试

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


void test1()
{
	ifstream inStream;
	ofstream outStream;
	inStream.open("inFile.dat");
	outStream.open("outFile.dat");
	int first, second, third;
	inStream >> first >> second >> third;
	cout << "first=" << first << "	second=" << second << "	third=" << third << endl;
	cout << "sum=" << first + second + third << endl;
	outStream << "first=" << first << "	second=" << second << "	third=" << third << endl;
	outStream << "sum=" << first + second + third << endl;
	inStream.close();
	outStream.close();
}

运行结果

标签:cout,笔记,years,学习,vector,C++,year,array,赋值
来源: https://www.cnblogs.com/zhangdezhang/p/16264787.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有