我有一个包含医生类的程序,每个Doctor对象都有一个"患者"链表.这些患者使用以下代码行创建
Patient * patient = new Patient(string firstname, string ailment);
Run Code Online (Sandbox Code Playgroud)
然后将该患者添加到Doctor的链接列表中.Doctor类中有一个指针,用于指向并遍历列表并获取每个患者.当我想要删除这些患者时,我必须从列表的开头开始并遍历每个患者.我的问题是,我可以通过简单地调用他们的析构函数来删除eacg患者吗?
Patient::~Patient(){
}
Run Code Online (Sandbox Code Playgroud)
或者,当我指向每个员工时,我是否需要在指针上实际调用delete?
我有一个程序可以告诉用户他们输入的温度是否为绝对零度.如果它确实如此,那么他们应该看到"没有熵给你",如果它更大,那么它应该告诉他们它们是多远超过它们,但我不断收到消息说我的if语句有错误,并且不知道在哪里首先,有人可以帮助我吗?
PROGRAM Project2
CHARACTER(1):: tempType
REAL:: k, f, c
REAL:: temp
REAL:: answer
PRINT *, "What is the temperature type?"
READ *, tempType
PRINT *, "whats the temp?"
READ *, temp
k = 0.0
c = -273.15
f = -459.67
answer = getMinTemperature(tempType)
PRINT *, answer
CONTAINS
FUNCTION getMinTemperature(tempType)
REAL:: getMinTemperature
CHARACTER(1), INTENT(IN):: tempType
REAL:: temp
DO i = 1, num
IF(ACHAR(tempType(i)) <= temp .AND. k > temp) THEN
k= 0.0
getMinTemperature = k
EXIT
ELSE IF (c <= temp …
Run Code Online (Sandbox Code Playgroud) 我正在学习一种用于查找数组中元素数量的技术(这样我就可以开始编写排序算法,而不需要将数组的长度作为参数传递,但是在教程中,这个line显示为模板声明:
template <typename T, size_t N>
Run Code Online (Sandbox Code Playgroud)
老实说,我不知道你可以在一个模板声明中声明多个类型名称,但是"size_t N"的作用是什么?这是一个模板声明中的变量声明吗?
有些人可能知道或者可能不知道您可以使用以下代码获取函数的数组参数的大小:
template<typename DataType, size_t SIZE>
void SortingAlgorithm(DataType (&array)[SIZE])
{
...
return;
}
Run Code Online (Sandbox Code Playgroud)
其中SIZE可用于表示数组中元素的数量,允许程序员使用您的函数将数组作为参数传递,而无需显式传递长度.例如,程序员可以这样做:
SortingAlgorithm( arrayToBeSorted ); //the length is not passed here, which is fine
Run Code Online (Sandbox Code Playgroud)
对于可以相对容易地以迭代方式实现的算法,这很好.但我试图用其他递归算法来做这件事.每个代码的代码可能如下所示:
template<typename DataType, size_t SIZE>
void SortingAlgorithm(DataType (&array)[SIZE])
{
DataType newArray[SIZE];
memcpy(newArray,array, SIZE); //copy to a new array
SortingAlgorithm( newArray );
...
return;
}
Run Code Online (Sandbox Code Playgroud)
但是这每次都会抛出一个错误,说程序期望一个不同的参数类型,类型转换失败,并且显示尝试多次为newArray数组类型化SIZE说明符,并且程序失败.但是,如果在进行递归调用之前使用实际值来定义newArray的大小,它不会吐出这些错误,如下所示:
DataType newArray[10]; //arbitrary number, but the compiler accepts this.
Run Code Online (Sandbox Code Playgroud)
为什么变量大小的数组会导致错误?无论如何还要实现一个递归算法,它接受一个数组作为输入,但不要求数组的长度作为参数,因为它可以在函数调用中每次确定数组的长度?
排除将一种高级语言转换为另一种语言的编译器,编译为机器代码的编译器是否需要用汇编编写?
compiler-construction programming-languages machine-code low-level
如果我声明一个像这样的结构:
struct MyStruct
{
int* nums;
};
MyStruct ms;
ms.nums = new int[4];
Run Code Online (Sandbox Code Playgroud)
我是否需要delete ms.nums;
在退出程序之前调用,否则会nums
自动取消分配成员变量,因为ms
未在堆上声明MyStruct实例?
我看到很多不同的C++程序员在我们的数据结构实现中一直比我自己更了解这一点.例如,在这个AVL树实现中,
/**
* iterator find(const Key& key);
* const_iterator find(const Key& key);
* Usage: if (myAVLTree.find("Skiplist") != myAVLTree.end()) { ... }
* -------------------------------------------------------------------------
* Returns an iterator to the entry in the AVL tree with the specified key,
* or end() as as sentinel if it does not exist.
*/
iterator find(const Key& key);
const_iterator find(const Key& key) const;
Run Code Online (Sandbox Code Playgroud)
我试图弄清楚在什么情况下这比返回与key对应的值更有用.
如果我将这个采用到我自己的实现中(假设我正在设计某种容器)什么时候这样做会让我受益?
我注意到这是一个有效的原型,同时阅读了Jeff Lee发布的1985年的ANSI C语法规范,并编写了一个带有此签名的函数.这个原型的功能究竟可以返回什么?这个函数的简单主体是什么样的?
在C++中,我正在搞乱升级库,我有"boost \"目录,其中包含所有boost .hpp文件和目录,以及我的编译器在"MinGW\include\boost \"的include文件夹中.现在令我困惑的是,当我想使用文件"lambda.hpp"时,我必须实际键入:
#include <boost/lambda/lambda.hpp>
Run Code Online (Sandbox Code Playgroud)
但如果我要包含整个目录,例如"boost\algorithm \",我只需输入:
#include <algorithm>
Run Code Online (Sandbox Code Playgroud)
即使"algorithm"文件夹不在"MinGW\include"目录中,它也在"MinGW\include\boost \"中.为什么在包含整个目录而不是单个头文件时,我不需要提供完整的路径?