c++基础知识点总结

本文详细总结了C++的基础知识点,包括迭代器的特点、容器的特性与比较、容器适配器、关联容器如set和map的操作,以及预定义函数、指针、类的构造与析构函数、常量修饰符的使用等。此外,还涵盖了类的设计、拷贝构造函数、命名空间、I/O流、重载操作符规则和静态变量的特点。
摘要由CSDN通过智能技术生成

1. 迭代器

看实例学迭代器

#include "pch.h"
#include <iostream>
#include <vector>
using namespace std;
int main()
{
   
	vector<int> container;  //int代表容器中数据的类型
	for (int i = 1; i <= 4; i++)  
		container.push_back(i);
	vector<int>::iterator p; 
	for (p = container.begin(); p != container.end(); p++)
		cout << *p << " "; 
	cout << endl;
	
	cout << "逆向迭代器的使用:" << endl;
	vector<int>::reverse_iterator q;
	for (q = container.rbegin(); q != container.rend(); q++)
		cout << *q << " ";
	cout << endl;
	
	cout << "容器中元素的随机访问:" << endl;
	p = container.begin();
	cout << "输出容器中第三个数据元素:" << container[3] << endl;
	cout << "输出容器中第三个数据元素:" << p[3] << endl;
	cout << "输出容器中第三个数据元素:" << *(p + 3) << endl;
	p = container.begin();
	++p;
	cout << "输出第二项:" << *p << endl;
	p++;
	cout << "输出第三项:" << *p << endl;
	--p;
	cout << "输出第二项:" << *p << endl;
	
	cout << "向容器中重新赋值为0:" << endl;
	for (p = container.begin(); p != container.end(); p++)
		*p = 0;
	for (p = container.begin(); p != container.end(); p++)
		cout << *p << " ";
	cout << endl;
	return 0;
}

运行结果:
在这里插入图片描述
迭代器算法总结:

(1)迭代器特点

  • 迭代器,经常用指针来实现,每个容器类都有自己的迭代器类型。
  • 迭代器是和容器配合使用的对象,允许访问容器中的元素。
  • 自增++,将迭代器跳到下一个数据项。
  • 自减–,将迭代器跳到上一个数据项。
  • ==,!=判断两个迭代器是否指向同一个数据位置(同一元素)p1 == p2。
  • P是迭代器变量,*p:访问位于p处的数据(由p指向的数据)。

(2)函数

  • P=container.begin():返回容器container的迭代器p,并指向容器container的第一个数据项。
  • container.end():迭代器的末尾,最后一个数据项之后的位置。
  • container.rbegin():返回一个迭代器,定位到容器最后一个元素。
  • container.rend():返回一个迭代器,定位到第一个元素之前的位置。
  • container.size():返回容器中的元素个数。
  • container.push_back():将元素插入序列尾。
  • container.push_front():将元素插入序列首。
  • container.clear():删除容器中的所有元素。

注:rbegin和rend函数只能结合reverse_iterator使用;随机访问元素时,下标默认从0开始。

注:p[3]或*(p+3)不会改变p中迭代器的值,但是++ 或 - - 会改变迭代器的值(迭代器指向的数据元素改变)。

(3)迭代器的种类(每种又划分为常量和变量)

  • 正向迭代器:++
  • 双向迭代器:++ –
  • 随机访问迭代器:++ – 随机访问元素 如:vector
  • 常量迭代器:提领操作符 ( * )会生成元素的只读版本,可以把* p的值赋值给变量,或者把它输出到屏幕;不能通过向* p赋值来改变容器的值;声明方式:vector< int >::const_iterator p;
  • 可变迭代器:能通过向* p赋值来改变容器的值。(vector向量迭代器)

注:对容器来说,若有常量迭代器,则无法获得可变迭代器;若有可变迭代器,也可以获得常量迭代器。

2. 容器

(1)容器的特点

  • 每种数据结构都是一个模板类,如队列,栈(容纳数据),有一个参数指定存储数据的类型。
  • 一个容器就是一些特定类型对象的集合。
  • 顺序容器:为程序员提供了控制元素存储和访问顺序的能力。双链表list模板类、单链表slist、vector、deque(双端队列,任何一端增加删除数据)、array、string。
  • 顺序容器的编码同1中算法类似。
// 列表模板类 // 把list换为vector同样可以操作
#include <iostream>
#include <list>
Using namespace std;
int main()
{
   
	list<int> list_object;
	for (int i = 1; i <= 3; i++)
		list_object.push_back(i);
	cout << "List contains:" << endl;
	list<int>::iterator p;
	for (p = list_object.begin(); p != list_object.end(); p++)
		cout << *p << "  ";
	cout << endl;

	cout << "Setting entries:" << endl;
	for (p = list_object.begin(); p != list_object.end(); p++)
		*p = 0;
	cout << "Now list contains:" << endl;
	for (p = list_object.begin(); p != list_object.end(); p++)
		cout << *p << "  ";
	cout << endl;
	return 0;
}

(2)顺序容器的比较

  • vector:随机访问迭代器,可变大小数组,通过下标支持快速随机访问,在尾部插入和删除元素速度快。
  • string:与vector相似的容器,但专门用于保存字符,在尾部插入和删除元素速度快。
  • list:双向访问迭代器,双向链表,只支持双向顺序访问,任何位置进行插入和删除操作速度都比较快。
  • array:固定大小数组。支持快速随机访问,不能添加或删除元素。
  • deque:随机访问迭代器,双端队列,支持快速随机访问。

注:所有这些顺序模板类都有一个析构函数供回收内存。

3. 容器适配器

(1)容器适配器特点

  • 在其他类顶部实现的模板类;顺序容器的三个适配器stack、queue、priority_queue。
  • 容器、函数、迭代器都有适配器,本质上,一个适配器是一种机制,能够使某种事物(容器、函数、迭代器)的行为看起来像另外一种事物(适配器)一样。
  • 一个容器适配器接受一种已有的容器类型,使其行为(容器的行为)看起来像一种不同(不同于容器,是容器适配器)的类型。
  • Stack<int,vector < int > > //指定基础容器为vector;容器vector的适配器stack。

(2)stack模板类

#include <iostream>
#include <stack>
using namespace std;
int main()
{
   
	stack<char> stack_data;
	cout<<"stack初始化数据:"<<endl;
	char text;
	cin.get(text);
	while(text!='\n')
	{
   
		stack_data.push(text);
		cin.get(text);
	}
	cout<<"输出stack数据:"<<endl;
	while(!stack_data.empty())
	{
   
		cout<<stack_data.top();
		stack_data.pop();
	}
	cout<<endl;
	return 0;
}

输出结果:符合栈数据特点:先进后出。
在这里插入图片描述
函数:

  • cin.get(text):键盘输入字符新数据。
  • stack_data.push(text):数据入栈。
  • stack_data.pop():数据出栈。
  • stack_data.empty():判断栈空。

4. 关联容器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值