首页 > 编程语言 >c++实现的小型stl中遇到的问题

c++实现的小型stl中遇到的问题

时间:2024-05-19 20:52:25浏览次数:23  
标签:Node head 小型 cur temp stl c++ tail newNode

  • friend std::ostream& operator<<(std::ostream &ot, const List& lis);
    参数表中第一个ot应该是引用,因为 std::ostream 是不可复制的,只能通过引用进行传递,以确保正确的流传递和状态维护。
    要访问类的私有成员时,非成员函数重载运算符必须声明为友元函数
    因为参数表中第一个ot是引用,所以返回值也必须是引用
void List::append(int n) {**//当链表为空时,head和tail不能访问,所以要判断**
	Node* newNode = new Node(n);
	if (!this->tail) {
		this->head = newNode;
		this->tail = newNode;
		this->len++;
		return;
	}
	newNode->prev = this->tail;
	this->tail->next = newNode;
	this->tail = newNode;
	this->len++;
}
bool List::delete_left(int& n) {
	if(!this->head) {
		return false;
	}
	n = this->head->data;
	Node* temp = head;
	head=head->next;
	delete(temp);   **//不能这么写delete(head->prev);因为head可能为空**
	if(head)head->prev = NULL;
	else tail = NULL;
	this->len--;
	return true;
}
List::~List() {
	Node* cur = head;
	while (cur) {
		Node* temp = cur;**//删除必须用temp**
		cur = cur->next;**// cur = cur->next;与delete(temp);顺序不能颠倒**
		delete(temp);
	}
}

*其他文件引入头文件时: #include "list.h" //不能写成#include<list.h>,因为list.h不在标准库中

  • static constexpr int ARR_MAX = 1000;//定义常量表达式

*bool is_full() const;//const表示该函数不会修改成员变量

*inline 的方法通常在类定义中实现。如果在类定义之外实现 inline 方法,则需要确保其定义在头文件中且与类定义在同一个编译单元中。

标签:Node,head,小型,cur,temp,stl,c++,tail,newNode
From: https://www.cnblogs.com/yige-pig/p/18200734

相关文章

  • STL | string
    string介绍c++支持两种类型的字符串,一以NULL结尾的c风格字符串;二string类型的字符串头文件string是basic_string类模板使用char特化的类型#include<string>typedefbasic_string<char,char_traits<char>,allocator<char>>string;初始化//默认string对象,长度为0str......
  • Effective C++:3.资源管理
    所谓资源,就是一旦用了,就要还给系统。C++中最常见的就是动态分配内存。其他资源还包括文件描述符、互斥锁等等1.条款13:以对象管理资源把资源放到对象内,那么就可以通过C++的析构函数自动调用的机制去确保资源被释放。这种观念常被称为RAII(资源取得时机就是初始化时机)智能指针shar......
  • 【每周例题】力扣 C++ 一年中的第几天
    一年中的第几天题目一年中的第几天 思路分析1.substr函数分割字符串,stoi函数将字符串转为十进制stoi函数介绍substr函数介绍2.判断是否为闰年,如果是闰年,则二月的天数+1代码#include<bits/stdc++.h>usingnamespacestd;intmain(){ intmonths[13]={0,31,28,3......
  • UE4 C++ 攀爬功能
    UE中的TEXT()UE中使用TEXT()包含字符串后,将字符串转换为宽字符,其将被处理为支持Unicode和跨平台兼容性,而普通类型的字符串为一个窄字符类型,可能在跨平台出现问题。最主要的问题是在FString的构造函数中是接受TCHAR的所以对于FStringFNameFTEXT的构造需要传入TEXT("xxxx")。......
  • 百度 Apollo 使用 bazel 编译 C++ Boost 依赖出现 undefined reference to `boost::pyth
    CSDN搬家失败,手动导出markdown后再导入博客园因为一些原因,楼主想在Apollo自动驾驶框架里使用Boost.python工具来用C++调用Python,从网上找了个例子想编译下试试。C++代码如下(boost.python/EmbeddingPython-PythonWiki):#include<boost/python.hpp>usingnamesp......
  • C/C++技巧
    1.三目运算符语法:表达式1?表达式2:表达式3。表达式1为真则执行表达式2,否则执行表达式3。相比if语句,三目运算符短小简洁,适当使用可以提高代码可读性。另外,如果三目运算符返回左值,可以继续赋值。举例#include<iostream>usingnamespacestd;intmain(){system("......
  • C++学习----make
    基本规则:touchmain.cadd.csub.cadd.hsub.h#新建以上文件main函数:intmain(void){return0;}Makefile文件:main:main.oadd.osub.ogcc-Wall-gmain.oadd.osub.o-omainmain.o:main.cgcc-Wall-g-cmain.c-omain.oadd.o:add.cadd.h......
  • C++学习----gcc
    gcc编译步骤 静态库使用步骤hello_fn.h#ifndef_HELLO_FN_H#define_HELLO_FN_Hvoidhello(constchar*name);#endifhello_fn.c#include<stdio.h>#include"hello_fn.h"voidhello(constchar*name){printf("hello%S!!!\n",name);......
  • Qt/C++音视频开发74-合并标签图形/生成yolo运算结果图形/文字和图形合并成一个/水印滤
    一、前言在使用yolo做人工智能运算后,运算结果除了一个方框,还可能需要增加文字显示在对应方框上,以便标记是何种物体,比如显示是人还是动物,或者还有可能追踪人员,显示该人员的姓名。这种应用场景非常普遍,而且非常有必要,可以非常直观的直接看到对应移动的物体是什么。当然也有个缺点,就......
  • algo c++ 常用接口
    接口网站cppreferencesetunorder_set//unorder_setunorder_set<T>u_set;//insertu_set.insert(Tt);//findandjudgeiteratorit=u_set.find(Tt);if(u_set.find(t)!=it.end()){}//删除u_set.erase(t);技巧如果想要通过一种数据类型种的值构建另一种......