小编Rem*_*eau的帖子

为具有自定义键的C++映射编写自定义比较器

我正在尝试为具有自定义键的C++映射编写自定义比较器.

struct key { int year; int no; };
map<key, detail, compare> details_map;
Run Code Online (Sandbox Code Playgroud)

如果year值相等,则必须比较no值.

我试图想出一种方法来编写一个可以比较两个值的比较器.到目前为止,我只能写一个比较一个值的比较器.

struct Compare{bool operator()(const key &lhs,const key &rhs)const{return lhs.year<rhs.year;}}
Run Code Online (Sandbox Code Playgroud)

有人可以解释比较器如何工作map

此外,是否可以将比较器写为函数?

c++ comparator

-2
推荐指数
1
解决办法
810
查看次数

如何在c ++中打印"\"?

我有一个家庭作业,其中部分菜单必须"R\C"打印,但是当我运行程序时,控制台就会打印出来"RC".有谁知道为什么会发生这种情况以及如何解决这个问题?

这就是我在Visual Studio中所拥有的:

cout << "R\C" << endl;
Run Code Online (Sandbox Code Playgroud)

c++ cout

-2
推荐指数
1
解决办法
63
查看次数

如何在Delphi 7中将数组成员声明为类

是否有可能将TMistakes2D添加到类TForm1中?

type
  TMistakes2D: array of TStringList;
  end;
type
  TForm1 = class(TForm)
    mistakes2D: TMistakes2D;
  end;
Run Code Online (Sandbox Code Playgroud)

这打印错误......

Field Form1.mistakes2D没有相应的组件.删除声明?

delphi

-2
推荐指数
1
解决办法
140
查看次数

Delphi TTimer在Win 10中提供了不寻常的结果

我有一个应用程序,允许我的用户打开和关闭计时器,以跟踪他们在某项任务上花费的时间.计时器运行一个时钟,用于向用户显示已用时间,就像秒表一样.

下面的代码已经按照我的想法工作了几年了.但是,当应用程序在Win 10上运行时,"时间"速率有时会在会话期间加快2或3倍.如果用户重新启动应用程序,它可能以正常速度运行.

赢得10 Delphi 10.3

procedure TfmTimeCard.btnTimerClick(Sender: TObject);
begin
  if btnTimer.Caption = 'Start &Timer' then
  begin
    btnTimer.Down := True;
    btnTimer.Caption := 'Stop &Timer';
    pnlTimer.Color := clPurple;
    btnResume.Enabled := True;
    btnAssign.Enabled := False;
    Timer1.Enabled := true;
    UpdateTimer.Enabled := True;
    ElapsedTime := ElapsedTime;
    //btnPostRecord.Enabled := False;
    btnCancel.Enabled := False;
    btnDeleteTimeCard.Enabled := False;
  end
  else
  begin
    btnTimer.Down := False;
    btnTimer.Caption := 'Start &Timer';
    pnlTimer.ParentColor := True;
    btnResume.Enabled := False;
    btnAssign.Enabled := True;
    pnlTimer.Color := clMoneyGreen;
  end;
end;

procedure TfmTimeCard.Timer1Timer(Sender: TObject);
begin
  if …
Run Code Online (Sandbox Code Playgroud)

delphi ttimer windows-10 delphi-10.3-rio

-2
推荐指数
1
解决办法
116
查看次数

C ++-不允许使用抽象类类型的对象

当前正在研究由可调整大小的数组控制的堆栈的实现。尝试实例化的新对象会ResizableArrayStack产生错误。

不允许抽象类类型为“ csc232 :: ResizableArrayStack”的E0322对象:ResizableArrayStack.cpp 107
            函数“ csc232 :: ResizableArrayStack :: isEmpty [with ItemType = int]”是一个纯虚函数
            函数“ csc232 :: ResizableArrayStack :: push [with ItemType = int]”是一个纯虚函数
            函数“ csc232 :: ResizableArrayStack :: pop [with ItemType = int]”是一个纯虚函数
            函数“ csc232 :: ResizableArrayStack :: peek [with ItemType = int]”是一个纯虚函数

StackInterface.h

#include "pch.h"
#pragma once
#ifndef CSC232_HW05_RESIZABLE_ARRAY_STACK_STACK_INTERFACE_H
#define CSC232_HW05_RESIZABLE_ARRAY_STACK_STACK_INTERFACE_H

namespace csc232 {
    template<typename ItemType>
    class StackInterface {
    public:
        /**
         * Sees whether the stack is empty.
         * @return True if the stack …
Run Code Online (Sandbox Code Playgroud)

c++ virtual class function abstract

-2
推荐指数
1
解决办法
191
查看次数

C++ 调用 int 两次

我正在编写代码,不小心int在变量之前放置了两次,并注意到最终产品中存在一些不同。

int main ()
{
    int number = 123456789;
    int step = 0;

    while (number>0)
    {
        cout << number%10 << endl;
        number = number/10;
        step = step+1;
        cout << "step ; " << step << endl;
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出是:

int main ()
{
    int number = 123456789;
    int step = 0;

    while (number>0)
    {
        cout << number%10 << endl;
        number = number/10;
        step = step+1;
        cout << "step ; " << step << endl;
    }

    return …
Run Code Online (Sandbox Code Playgroud)

c++ integer

-2
推荐指数
1
解决办法
159
查看次数

如何使用 C++ 中的 getline() 函数从多行文本文件中每行读取 3 行?

我正在尝试使用该函数从文本文件中读取 3 行getline()

当我读取两行时,它工作得很好,因为我能够通过计算它是奇数行还是偶数行来区分。但对于 3 条线来说,这是不可能的。那么,有什么方法可以使用该getline()功能来做到这一点吗?

这是数据在文本文件中的样子:

图像

我想以每组 3 行代表代码中一个单独的节点的方式阅读它。因此,节点的第一行是联系人的姓名,节点的第二行是联系人组,第三行是电话号码。这样,我就可以将多个节点的数据存储在一个系列中。

void reopenCB() {
    bool isEmpty;
    ifstream myfile("contactbook.txt");
    if (myfile.is_open() & myfile.peek() != EOF) {
        int i = 0;
        while (getline(myfile, x)) {
            if (i % 2 == 0) {
                if (head == NULL) {
                    Node *newer = new Node;
                    newer->name = x;

                    newer->next = NULL;
                    newer->prev == NULL;
                    head = newer;
                } else {
                    Node *newer = new Node;

                    newer->name = x;
                    newer->next = NULL;

                    Node …
Run Code Online (Sandbox Code Playgroud)

c++ getline

-2
推荐指数
1
解决办法
474
查看次数

为什么我应该使用按值传递而不是按引用传递?

我正在学习高级主题,并在脑海中遇到一个问题 - 为什么我需要使用按值传递而不是按引用传递?

问题源于内存管理,也就是说,如果将变量作为值传递到函数中会生成该变量的副本,我是否应该需要通过引用将其作为 const 传递以有效地使用内存?

当我在 Google 上进行研究时,它通常指出,当我们不想更改函数内部的变量时,应该使用值传递。

下面是我的例子:

#include <iostream>

void foo(int a) {
   std::cout << "value of a: " << a << std::endl;
}

int main(){
   int b = 5;
   foo(5);
   return EXIT_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)

在上面的代码块中,我将b值传递给 function foo()。其中复制了b.

相反,如果我编写如下所示的函数:

#include <iostream>

void foo(const int& a) {
   std::cout << "value of a: " << a << std::endl;
}

int main(){
   int b = 5;
   foo(5);
   return EXIT_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)

使用此代码块,我不会复制b.

除了当我不想更改函数内部变量的内容时,当我调用函数而不是按引用传递时,使用按值传递有什么优点?

c++

-2
推荐指数
1
解决办法
213
查看次数

C++:如果在另一个函数中调用交换,为什么它不能工作

我很好奇为什么操作2可以成功交换ab,而操作1却不能。

//operation1:
void exchange(char *a, char *b)
{swap(a,b);}

//operation2:
swap(a,b);
Run Code Online (Sandbox Code Playgroud)

(我已将整个代码压缩为上面的几行)

我意识到操作1有点无稽之谈,但我仍然想知道为什么它不起作用。

c++ swap pointers function

-2
推荐指数
1
解决办法
51
查看次数

我可以为全局数组的元素命名吗?

我有一个数组,MyStruct* my[100];我在循环中设置数据,如下所示:

if id > X && id < Y { my[id-X] = p;
Run Code Online (Sandbox Code Playgroud)

现在我想访问my[0]as name0my[1]as different1my[2]asanotherThing等。

我该怎么做呢?我尝试了union+X宏,但这在 gcc 中不起作用(它在 clang 中起作用)。

我想我必须编写一个脚本,这样我就不会手写所有的#defines,但我认为#define anotherThing my[2]这是给出数组项名称的唯一方法,对吗?我想简单地写different1->myStructMember,而不是my[123]->myStructMember每次都写,这样不可读。

c++

-2
推荐指数
1
解决办法
93
查看次数