小编das*_*fex的帖子

我如何编写类似 std::variant 开关的代码?

我有一些var = std::variant<std::monostate, a, b, c>什么时候a, b, c是一些类型。

如何在运行时检查var包含什么类型?

在官方文档中,我发现如果var包含a类型并且我写的信息,std::get<b>(var)我会得到一个异常。所以我想到了这个解决方案:

try {
  std::variant<a>(var);
  // Do something
} catch(const std::bad_variant_access&) {
  try {
    std::variant<b>(var);
    // Do something else
  } catch(const std::bad_variant_access&) {
    try {
     std::variant<c>(var);
     // Another else
    } catch (const std::bad_variant_access&) {
      // std::monostate
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

但它是如此复杂和丑陋!有没有更简单的方法来检查std::variant包含什么类型?

c++ c++17 std-variant

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

std::contiguous_iterator 有什么用?

我可以将它用于什么目的?为什么它比 random_access_iterator 好?如果我使用它有什么好处吗?

c++ iterator c++17

7
推荐指数
2
解决办法
370
查看次数

如何在 Jupyter 单元格中并排显示两个数字

import pandas as pd
import seaborn as sns

# load data
df = sns.load_dataset('penguins', cache=False)

sns.scatterplot(data=df, x='bill_length_mm', y='bill_depth_mm', hue='sex')
plt.show()
sns.scatterplot(data=df, x='flipper_length_mm', y='body_mass_g', hue='sex')
plt.show()
Run Code Online (Sandbox Code Playgroud)

当我在 jupyter 中的一个单元格中用 seaborn 绘制两个图时,我得到以下视图:

在此处输入图片说明

我想并排绘制图,如下所示:

情节1 情节2

我该怎么做?

更新:

不是一个图形上的两个图,而是两个独立图形上的两个图。

  • 这不是正在寻求的解决方案,因为它是一个图形上的两个图。
fig, ax = plt.subplots(1,2)
sns.plotType(someData, ax=ax[0])  # plot1
sns.plotType(someData, ax=ax[1])  # plot2
fig.show()
Run Code Online (Sandbox Code Playgroud)
  • 来自建议的重复ipython notebook的解决方案水平排列图,不起作用
    • 选项 with%html导致数字在彼此之上绘制
    • 此外,其他选项用于ipython,而不是 Jupyter,或建议创建子图。

python jupyter-notebook

6
推荐指数
1
解决办法
3579
查看次数

如何找到文件的所有符号链接?

这是我的层次结构:

aaaaaaaa
|_q
  |_a.txt
|_w
  |_l1
  |_l2
Run Code Online (Sandbox Code Playgroud)

l1l2~ are symlinks to a.txt`。我运行此代码以查找 /aaaaaaaa 中 a.txt 的所有符号链接:

find ~/aaaaaaaa/ -exec ls -a {} ';' | grep '/home/khodor/aaaaaaaa/q/a.txt'
Run Code Online (Sandbox Code Playgroud)

它显然不起作用,因为我必须将文件的真实路径与a.txt. 我应该以什么方式做到这一点?

linux bash symlink find

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

为什么 rebind&lt;U&gt;::other 在 C++17 中被弃用并在 C++20 中被删除?

我知道它仅在 std::allocator 中被弃用和删除。我可以在我自己的分配器上实现它。但为什么它被弃用了呢?

c++ allocator c++17 c++20

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

泄漏和地址有什么区别?

我在我的项目中使用-fsanitize=leak-fsanitize=address。我认为泄漏发现内存泄漏(不删除内存)和地址发现拧内存访问。但是地址也说明了未删除的内存。那么,-fsanitize=leak需要出于什么目的呢?

c++ address-sanitizer

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

如何在编译时从一些不同的类型中选择类型?

我想做这样的事情:

template <uint64_t N>
struct a {
  static constexpr T1 v1 = {};
  static constexpr T2 v2 = {};
  static constexpr auto v3 = (N % 2 == 1 ? v1 : v2);
};
Run Code Online (Sandbox Code Playgroud)

但是我不能将 (? :) 用于不同类型。我怎么能做到这一点?

c++ metaprogramming c++11 c++14

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

如何将字节从 uint64_t 转换为 double?

我有从中读取uint64_tval 的二进制文件(使用 little-endian)。现在我想将其转换uint64_tdouble(不仅仅是转换,而是double我从文件中输入的数字)。所以应该有相同的位表示。我该怎么做?

c++ bit converters

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

如果 nothrow new 返回 nullptr,是否调用构造函数?

如果我使用new并获取std::bad_alloc编译器,则不会因为异常而调用构造函数。但是它是如何处理nothrow new我们在每种情况下都得到指针的原因的呢?本案标准中是否有特殊段落?

c++ pointers exception new-operator nothrow

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

没有类型,结构绑定不起作用?

我尝试做这样的事情

pair<int, int> f() {
    return {1, 2};
}

int a, b;
[a, b] = f();
Run Code Online (Sandbox Code Playgroud)

并得到编译错误。所有错误都归结为一个事实,即编译器认为它是一个语法错误的 lambda。所以如果我使用结构化绑定,我总是应该写auto?

c++ binding c++17

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

在堆栈上使用带有变量的放置 new 是否正确?

我们来看看这段代码:

A a(123);
new(&a) A(124);
Run Code Online (Sandbox Code Playgroud)

测试表明,在这种情况下,当程序关闭时,析构函数~A()将调用一次。因此,如果A我们有一些指针作为字段,我们将会出现内存泄漏。

A a(123);
a.~A();
new(&a) A(124); 
Run Code Online (Sandbox Code Playgroud)

这里一切都将是正确的。但根据标准,在析构函数调用后使用对象是未定义的行为(尽管大多数编译器提供的行为没有一些问题)。

我可以获取已调用析构函数的对象的地址吗?在堆栈变量上调用放置新是正确的操作吗?

c++ placement-new new-operator stack-pointer

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