【C++】一双破袜子(缝补中)

本文详细介绍了C++中Vector的多种初始化方式,包括默认初始化、指定大小初始化、指定元素值初始化以及通过已有vector初始化。同时,讨论了using关键字在命名空间、子类中引用父类成员以及类型别名的使用。此外,还解释了long long类型在C++11中的作用和使用。通过对这些基础知识的深入理解,有助于提升C++编程能力。
摘要由CSDN通过智能技术生成

在这里插入图片描述

Vector初始化问题

  • 默认初始化,vector为空,size为0,未开辟空间,可通过push_back()添加元素。
    vector<int> v;
    v.push_back(10);
  • 默认初始化,指定vector大小,元素初始值默认为0,元素增多时,同样可以通过push_back()来改变vector大小以增加元素。
	vector<int> v(5)
  • 指定初始化元素值为2
	vector<int> v(5,2);
  • 指定初始化元素值
	vector<int> v = {1,2,3,4,5}
  • 用已存在的vector初始化新的vector
    vector<int> v(5,2);
    vector<int> v_copy(v);
  • vector<vector>的初始化
      vector<vector>:说到底也还是一个vector,所以跟vector的初始化一样,第一个值表示大小,第二个表示元素值,只不过不同的是vector<vector>的元素值也是一个vector(同理也可以使用push_back(v)添加元素)
    vector<int> v(5,1);
    vector<vector<int>> matrix(5,v);

using的用法

命名空间

  在书写模块功能时,为了防止命名冲突会对模块取命名空间,这样子在使用时就需要指定是哪个命名空间,使用using声明,则后面使用就无须前缀了。需要注意的是每个名字需要独立的using声明

	using std::cin;	//using声明,当我们使用cin时,从命名空间std中获取它
	int main()
	{
		int i;
		cin >> i;	//正确:cin和std::cin含义相同
		cout << i;	//错误:没有对应的using声明,必须使用完整的名字
		return 0;
	}
	using std::cout;
	using std::endl;
	//或者直接:
	using namespace std;

  位于头文件的代码一般来说不应该使用using声明。因为头文件的内容会拷贝到所有引用它的文件中去,如果头文件里有某个using声明,那么每个使用了该头文件的文件就都会有这个声明,有可能产生名字冲突。

在子类中引用父类成员

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
  在子类中对基类成员进行声明,可恢复基类的防控级别。有三点规则:

  • 在基类中的private成员,不能在派生类中任何地方用using声明。
  • 在基类中的protected成员,可以在派生类中任何地方用using声明。当在public下声明时,在类定义体外部,可以用派生类对象访问该成员,但不能用基类对象访问该成员;当在protected下声明时,该成员可以被继续派生下去;当在private下声明时,对派生类定义体外部来说,该成员是派生类的私有成员。
  • 在基类中的public成员,可以在派生类中任何地方用using声明。具体声明后的效果同基类中的protected成员。
	class Base 
	{
	protected:
	    void test1() { cout << "test1" << endl; }
	    void test1(int a) {cout << "test2" << endl; }
	
	    int value = 55;
	};
	 
	class Derived : Base 	//使用默认继承
	{
	public:
	    //using Base::test1;	//using只是声明,不参与形参的指定
	    //using Base::value;
	    void test2() { cout << "value is " << value << endl; }
	};

  上面的class的默认继承是private,这样子类中是无法访问基类成员的,即test2会编译出错。但是如果我们把上面注释的声明给放开,则没有问题。注意:using::test1只是声明,不需要形参指定,所以test1的两个重载版本在子类中都可使用。

起别名

  相当于传统的使用typedef为现有类型创建别名,定义易于记忆的类型名。

	typedef 	std::vector<int> intvec;
	using 	intvec	= std::vector<int>;	//这两个写法是等价的
	typedef void (*FP) (int, const std::string&);
	using FP = void (*) (int, const std::string&);

  若不是特别熟悉函数指针与typedef,第一眼还是很难指出FP其实是一个别名,代表着的是一个函数指针,而指向的这个函数返回类型是void,接受参数是int, const std::string&。而using的写法把别名的名字强制分离到了左边,而把别名指向的放在了右边,比较清晰,可读性比较好。

long long类型

  相比于C++98标准,C++11整型的最大改变就是多了 long long。分为两种:long long 和unsigned long long。在C++11中,标准要求long long 整型可以在不同平台上有不同的长度,但至少有64位。我们在写常数字面量时,可以使用LL后缀(或是ll)标识一个long long 类型的字面量,而ULL (或ull、Ull、uLL) 表示一个unsigned long long 类型的字面量。(C++中,int占用4字节,32比特,数据范围为-21474836482147483647[-2^312^31-1]。int型数据是一个有符号的整型数据,其最高位为符号位(0表示正,1表示负))比如:

	long long int lli=-900000000000000LL; // 有符号的long long 变量lli
	unsigned long long int ulli=-900000000000ULL; // 无符号的 unsigned long long 变量ulli。
	using LL = long long;
	LL ll = -900000000000000LL;

  对于有符号的,下面的类型是等价的:long long、signed long long、long long int、signed long long int; 而unsigned long long 和 unsigned long long int 也是等价的。
  与 long long 整型相关的一共有3个:LONG_MIN、LONG_MAX 和ULONG_MAX, 它们分别代表了平台上最小的long long 值、最大的long long 值,以及最大的unsigned long long 值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZoomToday

给作者倒一杯卡布奇诺

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值