我在 Excel 中遇到一个经常遇到的问题,我真的很想自动化或半自动化。
我有条目 A_x 后跟一个非空的 B_y 列表。现在,我想将列表映射的条目展平为简单的两列列表,以便于处理,如下例所示。
事实上,我的示例比此处显示的要大得多,我想避免乏味的复制和粘贴黑客行为。
不使用 VBA 和简单的 Excel 函数可以实现这一点吗?
我正在使用 来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),它正是我想要的。
我认为每个 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) 我正在尝试创建一个类,其中在构造函数的主体中,本地成员变量被初始化并在 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}\nRun Code Online (Sandbox Code Playgroud)\n但是,这段代码无法编译。对于修改本地成员的行,GCC 会抛出以下错误消息:
\nmain.cpp:9:13: error: increment of read-only variable \xe2\x80\x98localMember\xe2\x80\x99\n 9 | localMember++;\n | ^~~~~~~~~~~\nRun Code Online (Sandbox Code Playgroud)\n我对这个错误消息感到困惑,因为我从未将此变量标记为const并且可以在 lambda 之外修改它而不会出现任何问题。但是,如果我声明localMember为类成员,代码将编译没有任何问题。
\n此时我最好的猜测是 lambda 似乎无法“正确”访问成员,因为它只是一个临时值,稍后可能会被丢弃。然而,我的看法可能完全错误。
\n问题是:有没有办法在 lambda 中使用该变量,而不使其成为类成员?如果这是不可能的,为什么不呢?
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++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) 我的博客中有一个问答页面,我想让问题以大问号开头,答案以大感叹号开头,即首字下沉。::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)我正在尝试将我的库编译为 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)
为什么我没有任何符号?
我想创建一个std::index_sequence包含给定数字的倍数的对象。
假设我想保存类似0, 3, 6, 9, ...or的值0, 2, 4, 6, 8, 10, ...。
如何创建这样的自定义序列?
我想通过给出要生成的值的数量并在连续值之间步进来使用它。
我想过滤截止年之前最后一个测量年的所有观测值以及截止年之后所有年份的所有观测值。
这是一个例子:
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)