小编fue*_*zig的帖子

C++错误消息"<near match>"是什么意思?

使用GNU C++编译器编译代码时,我会得到类似的结果

bla.cxx: In function `int main(int, const char**)':
bla.cxx:110: error: no matching function for call to `func(const classA*&, const classB<classC>*&) const'
someheader.h:321: note: candidates are: bool func(const classA*, const T*&, const std::string&, std::string&) [with T = classB<classC>] <near match>
Run Code Online (Sandbox Code Playgroud)

<near match>表示什么以及如何修复此错误?

(我在没有(希望)删除必要信息的情况下尽可能地简化了错误消息.实际上,我不想在这里提出一个明确的例子,但鼓励对这个问题的一般回复!)

c++ templates compilation

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

元组与元组

tuple为什么使用或转换向量时会得到以下不同的结果Tuple

julia> a = [1, 2, 3]
3-element Vector{Int64}:
1
2
3

julia> tuple(a)
([1, 2, 3],)

julia> Tuple(a)
(1, 2, 3)
Run Code Online (Sandbox Code Playgroud)

但广播给出了相同的结果:

julia> tuple.(a)
3-element Vector{Tuple{Int64}}:
(1,)
(2,)
(3,)

julia> Tuple.(a)
3-element Vector{Tuple{Int64}}:
(1,)
(2,)
(3,)
Run Code Online (Sandbox Code Playgroud)

(后者并不令人惊讶,因为它只是将单个数字转换为元组。)

(这是 Julia 1.6.1。)

tuples type-conversion julia

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

在std :: vector <std :: string>上使用find_if和bind2nd以及string :: compare

这似乎是一个学术问题,但我仍然对答案很感兴趣:

我有一个字符串向量s,我想在其中找到给定的字符串findme.这可以使用类似的东西来完成

find(s.begin(), s.end(), findme);
Run Code Online (Sandbox Code Playgroud)

我的问题是:必须有一种方法可以使用find_ifcompareSTL字符串的方法作为谓词,但是如何?就像是

find_if(s.begin(), s.end(), bind2nd(mem_fun_ref(&string::compare), string("findme")) );
Run Code Online (Sandbox Code Playgroud)

不起作用,因为compare方法有几个重载,编译器不知道选择哪一个.

第二步:我使用find_if而不是find的动机是我有一个从具有字符串属性的类派生的对象向量,name我想找到一个具有给定名称的对象.这是可能的(没有编写额外的函数用作谓词)?


编辑:正如使用Boost提到的一些(大多数:)答案 - 我宁愿不必为此包含Boost.(据我所知,大多数Boost库都是"唯一"模板,因此应该有一种不使用Boost的方法.)

c++ stl

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

在Python中退出到命令行

我有一个脚本,我想在某些条件下提前退出:

if not "id" in dir():
     print "id not set, cannot continue"
     # exit here!
# otherwise continue with the rest of the script...
print "alright..."
[ more code ]
Run Code Online (Sandbox Code Playgroud)

我使用execfile("foo.py")Python交互式提示符运行此脚本,我希望脚本退出并返回到交互式解释器.我该怎么做呢?如果我使用sys.exit(),Python解释器完全退出.

python scripting command-line exit execfile

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

如何在Python中实现循环缓冲区?

我有一个矩阵

a=[12,2,4,67,8,9,23]
Run Code Online (Sandbox Code Playgroud)

我想要一个代码,它附加一个值为45,并删除第一个值'12',所以本质上我想做

a = [2,4,67,8,9,23,45]
Run Code Online (Sandbox Code Playgroud)

我想使用常规矩阵而不是numpy矩阵,所以我不能使用hstack或vstack如何在python中执行此操作?任何帮助将不胜感激,谢谢

python arrays matrix sliding-window

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

git: --prune-empty 使用 bfg 重复提交后

我正在使用bfg从(克隆)git 存储库中删除一些子目录:

java -jar bfg-1.12.12.jar --delete-folders {folder1,folder2,folder3} --no-blob-protection myrepo.git/
git reflog expire --expire=now --all && git gc --prune=now --aggressive
Run Code Online (Sandbox Code Playgroud)

这工作正常,但在我使用 bfg 之后,我有很多空提交(即带有漂亮日志消息的提交但没有更改,因为它们只涉及现在已删除的文件)。

所以下一步我尝试使用

git filter-branch --commit-filter 'git_commit_non_empty_tree "$@"' HEAD
Run Code Online (Sandbox Code Playgroud)

或者

git filter-branch --prune-empty --tag-name-filter cat -- --all
Run Code Online (Sandbox Code Playgroud)

两个版本都没有预期的效果(删除空提交)。

相反,我最终得到的是一个存储库(见下面的截图,左边是修剪前,右边是修剪后):

  1. 一些空提交已被删除
  2. 大多数空提交仍然存在
  3. 非空提交在单独的提交序列中重复

在此处输入图片说明

有什么建议吗?

git git-rewrite-history bfg-repo-cleaner

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

如何编写在每次运行中都给出相同输出的 Python 程序?

我有以下代码

import random

random.seed(42)

mylist = set(["A", "B", "C", "D", "E", "F", "G", "H"]) 
tn = random.sample(mylist, 4)
print(tn)
Run Code Online (Sandbox Code Playgroud)

到目前为止,我希望这总是打印相同的结果。但是,在每次连续运行时,它都会返回不同的 4 个字母序列。后来我发现它在删除时是稳定的set(在这个最小的例子中,除了触发问题之外没有其他用途)。

为什么有人会set以不确定的方式实施?我可以想象它的实现可能需要(伪)随机数,但即便如此,我还是希望我的程序仍然是确定性的,即使使用set. 我还注意到这是依赖于版本的:

Python版本:

  • 2.7.12:稳定
  • 3.5.2:不同的输出
  • 3.6.12:不同的输出

如何使用set并仍然获得可重现的输出?在采样之前使用排序mylistsorted有效的,但是您必须对在(天真的)空操作之后再次排序的列表进行排序是非常不直观的。

python random set random-seed

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

在Python中从字符串创建变量

在Python中可能具有以下内容:

>>> vars = {'a': 5}
>>> makevars(vars)
>>> print a
5
Run Code Online (Sandbox Code Playgroud)

因此,makevars将字典转换为变量.(一般来说这叫什么?)

python variables

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

C++:从"for each"循环中删除map中的值

对于std::vector<double*> v;我可以double通过调用删除s

std::for_each(v.begin(), v.end(), (void(*)(void* a))operator delete);
Run Code Online (Sandbox Code Playgroud)

现在,如果我有std::map<int, double*> m;,我可以在不使用显式循环,增强或非标准STL扩展的情况下执行类似的操作吗?即什么是???

std::for_each(m.begin(), m.end(), ???);
Run Code Online (Sandbox Code Playgroud)

c++ foreach stl function-pointers map

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