问题列表 - 第318099页

展平条目以列表映射到 Excel 中的两列对应关系

我在 Excel 中遇到一个经常遇到的问题,我真的很想自动化或半自动化。

我有条目 A_x 后跟一个非空的 B_y 列表。现在,我想将列表映射的条目展平为简单的两列列表,以便于处理,如下例所示。

事实上,我的示例比此处显示的要大得多,我想避免乏味的复制和粘贴黑客行为。

不使用 VBA 和简单的 Excel 函数可以实现这一点吗?

展平列表示例

excel list excel-formula

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

为什么函数 toTitleCase 不适用于 english(1),但 toupper 可以?

我正在使用 来library(english)让我的 rmarkdown 文档正确符合 APA 指南,了解何时将数字写成单词。超级方便,我可以将我的值包含进去english(),结果就正确了。

显然,当以数字开头的句子时,它需要将第一个字母大写,所以我想我可以将其换行english(1)tools::toTitleCase()但它不喜欢它:

Error in toTitleCase(english(1)) : 'text' must be a character vector
Run Code Online (Sandbox Code Playgroud)

toupper(english(1))正如人们所期望的那样工作:

> toupper(english(1))
[1] "ONE"`
Run Code Online (Sandbox Code Playgroud)

我有一个可行的解决方案:

toTitleCase(as.character(english(1)))

对我来说很好,但是...

...这里发生了什么?为什么能够按照您的预期toupper()处理输出,但却抛出错误?english(1)toTitleCase()

代表:

install.packages("english")
library(engilsh)
library(tools)

toTitleCase(english(1))

toupper(english(1))
Run Code Online (Sandbox Code Playgroud)

编辑:

我是个白痴:有一个 function english::Words(1),它正是我想要的。

r class typeof

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

C++ 虚函数基准测试

我认为每个 C++ 程序员都曾在某个时候听说过“虚拟函数很慢”这句话。因此,我决定将虚拟函数与常规成员函数进行基准测试。

不幸的是,我在对“低级”C++ 代码进行基准测试方面没有太多经验,并且不知道如何正确避免编译器或硬件(主要是分支预测器)优化效果。

我现在面临的问题是,当我运行基准测试(我在下面提供)时,我几乎总是得到调用虚拟函数和常规函数具有相同速度的结果,有时虚拟函数工作得更快!

这就是我使用google/benchmark库编写基准的方式:

static void BM_MemberCall(benchmark::State& state) {
    Base* b = new Derived();

    for ([[maybe_unused]] auto _ : state) {
        benchmark::DoNotOptimize(b->Foo());
        benchmark::ClobberMemory();
    }
}
BENCHMARK(BM_MemberCall);

static void BM_VirtualCall(benchmark::State& state) {
    Base* b = new Derived();

    for ([[maybe_unused]] auto _ : state) {
        benchmark::DoNotOptimize(b->VirtualFoo());
        benchmark::ClobberMemory();
    }
}
BENCHMARK(BM_VirtualCall);
Run Code Online (Sandbox Code Playgroud)

我的类定义如下,声明于util.h

#pragma once

// generate 10 virtual functions
#define VFOO(NAME, ID, ...) \
    __attribute__((noinline)) virtual int NAME ## ID ## _0() __VA_ARGS__; \
    __attribute__((noinline)) virtual …
Run Code Online (Sandbox Code Playgroud)

c++ benchmarking virtual-functions microbenchmark

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

构造函数主体中的 lambda 中使用的非常量本地成员的“只读变量增量”错误

我正在尝试创建一个类,其中在构造函数的主体中,本地成员变量被初始化并在 lambda 中重用,该 lambda 也直接在构造函数的主体中初始化。一个非常简单的版本如下所示:

\n
#include <iostream>\n\nclass TestClass {\n    public:\n    TestClass()\n    {\n        auto localMember = 0;\n        const auto incrementAndDisplay = [localMember] {\n            localMember++;\n            std::cout << "Member value is now increased to: " << localMember << std::endl;\n        };\n\n        incrementAndDisplay();\n    }\n};\n\nint main()\n{\n    TestClass testClass;\n    return 0;\n}\n
Run Code Online (Sandbox Code Playgroud)\n

但是,这段代码无法编译。对于修改本地成员的行,GCC 会抛出以下错误消息:

\n
main.cpp:9:13: error: increment of read-only variable \xe2\x80\x98localMember\xe2\x80\x99\n    9 |             localMember++;\n      |             ^~~~~~~~~~~\n
Run Code Online (Sandbox Code Playgroud)\n

我对这个错误消息感到困惑,因为我从未将此变量标记为const并且可以在 lambda 之外修改它而不会出现任何问题。但是,如果我声明localMember为类成员,代码将编译没有任何问题。
\n此时我最好的猜测是 lambda 似乎无法“正确”访问成员,因为它只是一个临时值,稍后可能会被丢弃。然而,我的看法可能完全错误。
\n问题是:有没有办法在 lambda 中使用该变量,而不使其成为类成员?如果这是不可能的,为什么不呢?

\n

c++ lambda

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

使用 std::array 作为存储会调用 UB 吗?

std::array<std::byte, N> storage分配一些内存可以用作存储吗?例如,a.data()即使分配对象的生命周期与 无关,在 上调用placement-new 是否安全std::array

std::aligned_storage_t在 C++23 中被弃用的原因是,它的 UB 植根于其设计(并且 API 很差,但在这个问题中并非如此),虽然它非常接近 的用例std::array,所以是否强制使用C 风格的数组std::byte storage[N]作为内存分配的存储,不是std::array(甚至可能std::vector)。

c++ lifetime placement-new language-lawyer c++20

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

依赖模板类型的解析错误

下面的代码符合C++20标准吗?或者,应该由于某些语法错误而被拒绝吗?所有 3 个编译器(Clang、GCC 和 MSVC)似乎都拒绝它。

template<typename...>
struct n {
    template<typename>
    struct b {
        template<typename>
        struct p {};
    };
    template<typename T>
    struct d : b<T>::template p<T> {};
    template<typename T>
    d(b<int>::template p<T>) -> d<T>;
    template<typename T>
    static constexpr auto v = d{b<int>::template p<T>{}};
};
inline constexpr auto w = n{}.v<int>;
Run Code Online (Sandbox Code Playgroud)

当删除 type 的模板头时n,所有编译器都会接受该代码。为什么这很重要?标准对基于是否模板化的代码处理方式有何规定n

演示


Clang 的错误消息:

<source>:11:15: error: 'template' keyword not permitted here
   11 |     d(b<int>::template p<T>) -> d<T>;
      |               ^~~~~~~~
<source>:11:24: error: member 'p' declared as a …
Run Code Online (Sandbox Code Playgroud)

c++ language-lawyer c++20

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

如何将首字下沉样式应用于伪元素内容

我的博客中有一个问答页面,我想让问题以大问号开头,答案以大感叹号开头,即首字下沉。::first-letter使用伪元素和属性很容易实现这种效果initial-letter,就像这里提出的另一个问题(Drop-caps using CSS)中演示的那样,但问题是问号和感叹号不是字母,因此这种方法不起作用对于他们来说。有替代解决方案吗?

我的临时解决方案是使用::before伪类,但它只会使问号或感叹号变大,而不会使其成为首字下沉。

我想知道是否有办法让问号沉入段落中,而不仅仅是变大。

.question::before {
  content: '?';
  font-size: 3em;
  font-weight: 800;
  padding: 15px;
  display: inline-block;
}
Run Code Online (Sandbox Code Playgroud)
<div class="question">I have a Q&A page in my blog, and I wanted to make it so the question starts with a large question mark, and the answer with a large exclamation mark, that is a drop cap. Such effect is easy to achieve with `::first-letter` pseudo-element and `initial-letter` property, but the problem …
Run Code Online (Sandbox Code Playgroud)

html css pseudo-element drop-cap

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

如何使用 clang 获取共享库上的符号?

我正在尝试将我的库编译为 Mac 上的共享库。你可以在这个 PR上找到我的尝试。

这是我正在使用的命令行和详细结果:

$ gcc -v -dynamiclib -fPIC -o .../luos_engine/.pio/build/native_lib/libluos_engine.dylib .../luos_engine/.pio/build/native_lib/libdf9/libluos_engine.a
Apple clang version 15.0.0 (clang-1500.1.0.2.5)
Target: x86_64-apple-darwin23.2.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
 "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld" -demangle -lto_library /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/libLTO.dylib -dynamic -dylib -arch x86_64 -platform_version macos 14.0.0 14.2 -syslibroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk -o .../luos_engine/.pio/build/native_lib/libluos_engine.dylib -L/usr/local/lib .../luos_engine/.pio/build/native_lib/libdf9/libluos_engine.a -lSystem /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/15.0.0/lib/darwin/libclang_rt.osx.a
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,编译似乎可以正常工作,但是当我尝试获取库上的符号时,我什么也没有:

$ nm .pio/build/native_lib/libws_luos_engine.dylib
.pio/build/native_lib/libluos_engine.dylib: no symbols
Run Code Online (Sandbox Code Playgroud)

为什么我没有任何符号?

c macos linker shared-libraries clang

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

使用自定义值编译时 std::index_sequence

我想创建一个std::index_sequence包含给定数字的倍数的对象。

假设我想保存类似0, 3, 6, 9, ...or的值0, 2, 4, 6, 8, 10, ...

如何创建这样的自定义序列?

我想通过给出要生成的值的数量并在连续值之间步进来使用它。

c++ templates c++17

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

如何过滤截止年之前最后一个测量年的所有观测值以及截止年之后所有年份的所有观测值

我想过滤截止年之前最后一个测量年的所有观测值以及截止年之后所有年份的所有观测值。

这是一个例子:

d <- data.frame(group = c(1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2),
                cut_off = c(2017,2017,2017,2017,2017,2017,2017,2017,2017,2016,2016,2016,2016,2016,2016,2016),
                year = c(2000,2010,2010,2015,2015,2017,2017,2020,2024,2001,2009,2016,2017,2017,2021,2023),
                value = c(10,20,30,40,50,60,70,80,90,100,110,120,130,140,150,160))

> d
   group cut_off year value
1      1    2017 2000    10
2      1    2017 2010    20
3      1    2017 2010    30
4      1    2017 2015    40
5      1    2017 2015    50
6      1    2017 2017    60
7      1    2017 2017    70
8      1    2017 2020    80
9      1    2017 2024    90
10     1    2016 2001   100
11     2    2016 2009   110
12 …
Run Code Online (Sandbox Code Playgroud)

r dplyr

5
推荐指数
3
解决办法
171
查看次数