我需要检查list1是否是list2的子列表(True;如果list2中与list1相同的每个整数与list1中的索引顺序相同)
def sublist(lst1,lst2):
for i in range(len(lst1)):
if lst1[i] not in lst2:
return False
for j in range(len(lst2)):
if (lst1[j] in lst2) and (lst2.index(lst1[i+1]) > lst2.index(lst1[i])):
return True
Run Code Online (Sandbox Code Playgroud)
任何人都可以帮助我......为什么这不起作用?
Rust.expect()是 Result/Option 空间中最令人惊讶的名字之一。虽然unwrap有道理——Result通过“解包”从 a 中获取一个值——但expect出奇地违反直觉(对我来说)。
由于 Rust 的大部分内容都受到函数式编程语言约定的启发,我一直假设这是“对默默无闻的奇怪敬意”的另一个例子,但是当我问鸭子时,它无法为我找到答案。
所以,我放弃了。为什么是.expect()Rust.unwrap_or_panic_with_this_message()函数的名称?这是对另一种功能语言中的功能的引用吗?它是 Tcl 的反手阴影(或补充)吗?Mozilla 熬夜太多,Espresso 太多的结果?
标准库中这个勇敢(但凶猛!)的小成员的词源是什么?
阅读有关通用引用的信息让我想知道:我如何构建一个类模板,以便在可能的情况下通过引用存储,或者如果必须的话通过值存储?
也就是说,我可以这样做吗?
template <class T>
class holder {
T obj_m; // should be a reference if possible...
public:
holder(T t) :obj_m { t } {}
}
auto
hold_this(T && t) { return holder<T>(t); }
Run Code Online (Sandbox Code Playgroud)
除了当hold_this()被赋予一个左值的持有人将持有的引用,并给予当右值持有者将制作副本吗?
我正在玩c ++ 14中的重载运算符,我尝试匹配两种类型的参数:any-old-const-char*和a-string-literal.
也就是说,我试图看看我是否可以区分:
const char * run_time;
Run Code Online (Sandbox Code Playgroud)
和
"compile time"
Run Code Online (Sandbox Code Playgroud)
我编写了下面的代码,如图所示,当我尝试span >> "literal"它时调用了该const char*函数.
当我#if 0退房手续的const char*版本,模板版本被调用就好了.
如果我更改模板版本以获取rvalue-reference(&&)参数literal,则不会编译.
如果我添加const char (&literal)[]非模板版本,则该const char*版本仍然是首选.删除const-char*版本,首选模板版本.
你能解释一下吗?特别是:
const char*首选const char (&)[N]?const char (&)[N]首选const char (&)[](非模板)?const char (&&)[N]无法编译?谢谢.
#include <iostream>
using namespace std;
#include <gsl/gsl>
#include <type_name.h++>
template<unsigned N>
auto
operator>>(gsl::span<const char*,-1>& spn, const char (&literal)[N]) …Run Code Online (Sandbox Code Playgroud) 我正在查看std::find_ifcppreference.com上的各种签名,我注意到采用谓词函数的风格似乎是按值接受它:
template< class InputIt, class UnaryPredicate >
InputIt find_if( InputIt first, InputIt last,
UnaryPredicate p );
Run Code Online (Sandbox Code Playgroud)
如果我正确理解它们,带有捕获变量的lambdas会为其数据的引用或副本分配存储空间,因此可能会出现"按值传递"意味着会为调用复制捕获数据的副本.
另一方面,对于函数指针和其他直接可寻址的东西,如果直接传递函数指针,而不是通过引用指针(指向指针),性能应该更好.
首先,这是正确的吗?UnaryPredicate以上是否是一个按值参数?
第二,我对传递lambdas的理解是否正确?
第三,在这种情况下,是否有理由通过价值而非参照?更重要的是,是不是有一些足够模糊的语法(hello,通用引用)可以让编译器做任何想要获得最大性能的东西?
我有一张int -> { basic types }我需要存储的地图.
我想简单地创建一个struct { int f1, int f2; };并直接存储值,在商店中就地构建结构.我不希望有任何重复的键,所以try_emplace看起来很理想.
我写了这段代码:
// mcve.cpp
#include <map>
#include <string>
struct various { int f1, f2; };
using map_t = std::map<int, various>;
void
example()
{
map_t dict;
//dict.try_emplace(1, 2);
dict.try_emplace(1, 1, 2);
//dict.try_emplace(1, {1, 2});
}
Run Code Online (Sandbox Code Playgroud)
但这些选项都不起作用.
使用clang ++我得到这样的错误.(版本:clang版本5.0.1(标签/ RELEASE_501/final))
/opt/local/libexec/llvm-5.0/include/c++/v1/tuple:1365:7: error: no matching
constructor for initialization of 'various'
second(_VSTD::forward<_Args2>(_VSTD::get<_I2>(__second_args))...)
^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
### ... many lines ...
mcve.cpp:14:7: note: in instantiation of …Run Code Online (Sandbox Code Playgroud) 我最近犯了在启用语法检查的情况下打开$PYTHONSTARTUP文件的错误mypy。结果,我开始收到此错误:
startup.py|79 col 2 error| Incompatible types in assignment (expression has type "HistoryPrompt", variable has type "str")
Run Code Online (Sandbox Code Playgroud)
在第 79 行:
sys.ps1 = HistoryPrompt()
Run Code Online (Sandbox Code Playgroud)
我立刻想,“天哪,mypy!你完全正确!然而,这正是我想要做的,所以你也错了!”
我去看看模块是否有某种“存根” sys,但找不到任何东西。我猜这mypy是通过查看存储在变量中的值来确定类型(默认为“>>>”,即 a str)。
在现实中,当然,类型需要是不存在的typing.Stringifiable,表明一个对象将响应str(x)。
到了那个死胡同后,我开始寻找一种方法mypy来抑制错误。这么多其他工具支持# noqa: xxx,我想一定有什么,对吧?
错误的。或者至少,我在我的版本中找不到它,即:mypy 0.670
所以,我设计了一个黑客巧妙的变通办法:
import typing
# Work around mypy error: Incompatible types in assignment
suppress_mypy_error: typing.Any = HistoryPrompt()
sys.ps1 = suppress_mypy_error
Run Code Online (Sandbox Code Playgroud)
我的问题是:有没有办法在线(最好)mypy.ini …
我有以下测试用例:
testcase("[room] exits") {
auto [center, east, north, south, west] = make_test_rooms();
check_eq(center->east(), east);
check_eq(center->north(), north);
check_eq(center->south(), south);
check_eq(center->west(), west + 1);
}
Run Code Online (Sandbox Code Playgroud)
当我编译它时,clang ++(clang版本5.0.1(标签/ RELEASE_501/final))报告:
room.cpp:52:7: note: Value stored to '[center, east, north, south, west]' during its initialization is never read
Run Code Online (Sandbox Code Playgroud)
在上面的代码,testcase和check_eq用于定义的宏的文档测试单元测试包展开后DOCTEST_TEST_CASE()(某种自注册变量+函数对)和DOCTEST_CHECK_EQ(基本上,"断言== B"魔术带处理).
我知道这段代码正在执行,因为这west + 1是故意引入的错误.当我运行我的测试时,我得到一个像这样的失败消息:
===============================================================================
/.../room.cpp(51)
TEST CASE: [room] exits
/.../room.cpp(57) ERROR!
CHECK_EQ( center->west(), west + 1 )
with expansion:
CHECK_EQ( 0x00007fd6f1d011a0, 0x00007fd6f1d011f8 )
Run Code Online (Sandbox Code Playgroud)
据我所见,我使用结构化绑定中的所有值: …
内置函数sizeof可以采用类型或表达式,并将返回适当的值。
我想构建一个使用_Generic()表达式来做类似事情的宏。特别是,我希望能够传递类型名称或值作为参数,就像sizeof.
作为一个简单的例子,我可以做这样的事情:
#define F(x) _Generic((x)+0, int: 1, long: 2)
Run Code Online (Sandbox Code Playgroud)
这是可行的,因为(x)+0可以是算术表达式或类型转换。
但当类型为 时,这不起作用struct Foo。
我可以使用带有大括号的复合文字语法:(x){0}但这对于文字值失败:
是否有一些扭曲的 C 语法恐怖允许在 - 表达式中使用类型名称或表达式_Generic?
我正在编写一个函数,用于检查"noughts and crosses"游戏中是否有赢家,或者"连续三次".
游戏的工作原理是首先在命令提示符中绘制3 x 3个方块.然后用户在方块之间移动光标,然后按Enter键以放置"X".下一个选定的方格中放置一个"O",然后再放一个"X",依此类推.在第5轮(第一个可能的转弯可能有胜利者)之后,该程序检查在每个回合之后是否有赢家,如果在9转之后没有找到(当所有方块都有某些东西时)该程序宣布平局.
但是,我为检查获胜者而编写的函数在被调用时总是返回1,这意味着有一个胜利者(更具体地说是X,因为那是最后一次移动的那个).因此,无论方块包含什么,游戏都在第5轮结束.
这是我的代码:
int control(char p[3][3]) {
int i;
for (i = 0; i <= 3; i++) //Checks if any of the horizontals have 3 of the same markers in a row
if (p[i][1] == p[i][2] && p[i][2] == p[i][3])
return 1;
for (i = 0; i <= 3; i++) //Checks if any of the vertical columns have 3 of the same markers
if (p[1][i] == p[2][i] && p[2][i] == p[3][i])
return 1;
else if …Run Code Online (Sandbox Code Playgroud) c++ ×5
c++17 ×4
c ×2
python ×2
python-3.x ×2
c++14 ×1
clang++ ×1
emplace ×1
for-loop ×1
function ×1
if-statement ×1
macros ×1
mypy ×1
python-2.7 ×1
return-value ×1
rust ×1
stdmap ×1
struct ×1
templates ×1