小编Rem*_*eau的帖子

哈希表:为什么在开放寻址方案中删除很困难

我试图理解开放寻址方法.我参考TH Cormen关于这个主题的书,其中指出在开放式寻址中删除是很困难的.我完全陷入这一段:

从开放地址哈希表中删除很困难.当我们从插槽中删除密钥时i,我们不能简单地通过存储将该插槽标记为空NIL.这样做可能会导致无法检索任何键,k在插入过程中我们已探测到插槽i并发现它已被占用.

我不明白这一点.请用一些例子解释一下.

algorithm hash hashtable

20
推荐指数
3
解决办法
1万
查看次数

为什么 range::for_each 返回该函数?

传统的std::for_each返回函数作为标准需要根据[alg.foreach]Function满足Cpp17MoveConstructible

\n
\n
template<class InputIterator, class Function>\n  constexpr Function for_each(InputIterator first, InputIterator last, Function f);\n
Run Code Online (Sandbox Code Playgroud)\n

前提条件Function满足Cpp17MoveConstructible要求。

\n

[注意:\xe2\x80\x82Function不需要满足Cpp17CopyConstructible的要求。尾注]

\n
\n

这是合理的,因为用户可能希望在调用后重用该函数。

\n

的并行版本for_each没有返回:

\n
\n
template<class ExecutionPolicy, class ForwardIterator, class Function>\n  void for_each(ExecutionPolicy&& exec,\n                ForwardIterator first, ForwardIterator last,\n                Function f);\n
Run Code Online (Sandbox Code Playgroud)\n

前提条件Function满足Cpp17CopyConstructible要求。

\n
\n

这是因为标准要求Function满足Cpp17CopyConstructible,因此不需要返回该函数,因为用户可以根据需要在调用方自由创建副本。

\n

我注意到ranges::for_each …

c++ language-design language-lawyer c++20 std-ranges

20
推荐指数
2
解决办法
1769
查看次数

int16_t上的C ++自动转换为整数

我是C ++ 17的新手,正尝试了解decltype关键字及其与的搭配auto

下面是产生意外结果的代码片段。

#include <typeinfo>
#include <iostream>
#include <algorithm>

using namespace std;

int main() {

  int16_t mid = 4;
  auto low = mid - static_cast<int16_t>(2);
  auto hi = mid + static_cast<int16_t>(2);

  int16_t val;
  cin >> val;

  val = std::clamp(val,low,hi);

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

令人惊讶的是,编译器告诉我clampand lowhighare都不匹配int。如果我更改autoint16_t世界上的所有人都很好,并且所有类型都int16_t符合预期。

我提出这个问题时,为什么不autolow,并hiint当所有的类型是int16_t这是一个很好的用例decltype吗?

即使在阅读cppreference.com之后,我仍然不完全了解其decltype工作原理,所以请原谅我的无知。

c++ decltype auto c++17

19
推荐指数
2
解决办法
1092
查看次数

是否可以使用 std::ignore 来丢弃函数的返回值以避免任何相关的编译器警告?

我知道您可以使用static_cast<void>,但它对我来说似乎太冗长了,并且没有反映我想要丢弃返回值而不是将其转换为任何东西的初衷。

最近我偶然发现std::ignore,它可以接受任何类型的值,名称清晰易读,对我来说似乎很合适。

我知道最初的意图是std::ignore与 一起使用std::tie来丢弃任何不需要的值,但我猜想 的最初意图static_cast是为了比丢弃值更好的原因而实际转换值,这样编译器就不会抱怨。

那么,可以用于std::ignore我在问题中描述的目的吗?

例如:

std::ignore = std::transform(...);
Run Code Online (Sandbox Code Playgroud)

c++ gcc c++14

19
推荐指数
2
解决办法
1658
查看次数

java utf8编码 - char,字符串类型

public class UTF8 {
    public static void main(String[] args){
        String s = "?"; //0xFF6E
        System.out.println(s.getBytes().length);//length of the string
        System.out.println(s.charAt(0));//first character in the string
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

3
?
Run Code Online (Sandbox Code Playgroud)

请帮我理解这个.试图了解utf8编码在java中的工作原理.根据char char的 java doc定义 :char数据类型是一个16位Unicode字符.

这是否意味着java中的char类型只能支持那些可以用2个字节而不是更多的字节表示的unicode字符?

在上面的程序中,为该字符串分配的字节数为3,但在第三行中返回第一个字符(java中为2个字节)可以容纳3个字节长的字符?这里真的很困惑?

关于这个概念在java/general中的任何好的参考将非常感激.

java utf-8

18
推荐指数
1
解决办法
4万
查看次数

Delphi XE TBytes正确用法

TBytes变量的正确使用模式是什么?根据我的理解,TBytes不是一个类,而是一个"动态字节数组".我不确定在哪里释放内存,释放它时,哪个是从生产者传递给消费者的最佳方式.我希望我的生产者创建一个TBytes实例,然后将其传递给消费者.在这种情况发生之后,生产者想要重用其TBytes成员变量,知道消费者最终将内存返回给系统的内容.如果TBytes是一个对象,我不会有任何问题,但我不确定TBytes在这种情况下是如何工作的.

例如,在对象A中,我想将一些数据组装成一个TBytes数组,该数组是对象A的成员.完成后,我想将TBytes数组传递给另一个对象B,然后该对象成为该对象的所有者.数据.同时,回到对象A,我想开始组装更多数据,重用TBytes成员变量.

type
  TClassA = class
  private
    FData: TBytes;
  public
    procedure AssembleInput(p: Pointer; n: Cardinal);
  end;

  TClassB = class
  public
    procedure ProcessData(d: TBytes);
  end;

var
  a: TClassA;
  b: TClassB;

procedure TClassA.AssembleInput(p: Pointer; n: Cardinal);
begin
  SetLength(FData, n);
  Move(p^, FData, n);  // Is this correct?
  ...
  b.ProcessData(FData);

  ...

  // Would it be legal to reuse FData now?  Perhaps by copying new (different)
  // data into it?
end;

procedure TClassB.ProcessData(d: TBytes);
begin
  // B used the TBytes here.  How does it free …
Run Code Online (Sandbox Code Playgroud)

delphi delphi-xe

17
推荐指数
2
解决办法
1万
查看次数

AADSTS65001:用户或管理员尚未同意使用 ID 为 &lt;app-id&gt; 的应用程序

我正在开发一个使用 Microsoft 的 OAuth2(代表用户流程)的 Angular + Flask 应用程序。我试图从后端调用 API,但出现异常。

这是以下配置app.module.ts

export function MSALInstanceFactory(): IPublicClientApplication {
  return new PublicClientApplication({
    auth: {
      clientId: '<application_id_of_spa>',
      authority: 'https://login.microsoftonline.com/organizations',
      redirectUri: 'http://localhost:4200/'
    },
    cache: {
      cacheLocation: BrowserCacheLocation.LocalStorage,
      storeAuthStateInCookie: isIE,
    },
    system: {
      loggerOptions: {
        loggerCallback,
        logLevel: LogLevel.Info,
        piiLoggingEnabled: false
      }
    }
  });
}

export function MSALInterceptorConfigFactory(): MsalInterceptorConfiguration {
  const protectedResourceMap = new Map<string, Array<string>>();
  protectedResourceMap.set('https://graph.microsoft.com/v1.0/me', ['user.read']);
  protectedResourceMap.set('https://api.powerbi.com/v1.0/myorg/', ['https://analysis.windows.net/powerbi/api/.default']);
  protectedResourceMap.set('http://localhost:5000/api/v1.0/get_workspaces',['api://<application_id_of_webapi>/.default'])

  return {
    interactionType: InteractionType.Popup,
    protectedResourceMap
  };
}

export function MSALGuardConfigFactory(): MsalGuardConfiguration {
  return { 
    interactionType: …
Run Code Online (Sandbox Code Playgroud)

flask oauth-2.0 azure-active-directory azure-ad-msal angular

17
推荐指数
1
解决办法
4万
查看次数

为什么我不能用operator >>读取fstream的二进制数据?

如果我执行以下操作:

ifstream file;
file.open("somefile", ios::binary);

unsigned int data;

file >> data;
Run Code Online (Sandbox Code Playgroud)

我的流将始终设置,failbit并且data将保持未初始化.但是,如果我读了一个char或者unsigned char相反,那么流就可以了. perror()告诉我"结果太大".

我在Google上看到的唯一一件事是建议说不operator>>应该用于二进制数据(首选read()),但我发现操作员更清洁,更容易使用 - 并且它不需要投射所有内容.

有人可以解释这个问题吗?

c++ binary fstream stream

16
推荐指数
1
解决办法
5113
查看次数

Delphi.Personality 不可用

最近,我收到此错误,并且所有与 Delphi 相关的项目/文件创建项都丢失了:

该项目无法加载,因为所需的个性 Delphi.Personality 不可用。

我需要做的是选择“管理平台”,然后 RAD Studio 将重新安装一些组件并恢复项目菜单。

但是,当我关闭并重新打开 RAD Studio 时,该问题将再次出现。

我以前没有这样的问题。有谁知道如何修理它?

delphi rad-studio

16
推荐指数
3
解决办法
1万
查看次数

命名空间 std 中不可寻址函数的基本原理是什么?

[namespace.std]不允许获取命名空间中大多数函数的地址或引用std。这是一个很大的陷阱,因为将标准库函数作为参数传递似乎通常是有效的,尽管这可能会在不同的编译器上停止工作,甚至更糟。

据推测,这样做是为了允许实现专门优化标准库。这个限制使得 C++ 更难使用。

您能否给出明确的示例来说明 C++ 实现如何从std命名空间的这种限制中受益?

如果这些优化如此重要以至于使得 C++ 更难使用,为什么一些非系统库不需要同样的东西呢?

c++ language-design

15
推荐指数
1
解决办法
284
查看次数