小编the*_*edi的帖子

哪个更有效:返回值与通过引用传递?

我目前正在研究如何编写高效的C++代码,在函数调用方面,我想到了一个问题.比较这个伪代码功能:

not-void function-name () {
    do-something
    return value;
}
int main () {
    ...
    arg = function-name();
    ...
}
Run Code Online (Sandbox Code Playgroud)

使用其他相同的伪代码功能:

void function-name (not-void& arg) {
    do-something
    arg = value;
}
int main () {
    ...
    function-name(arg);
    ...
}
Run Code Online (Sandbox Code Playgroud)

哪个版本更有效,以及在什么方面(时间,内存等)?如果它取决于,那么第一个什么时候会更有效率,什么时候第二个会更高效?

编辑:对于上下文,此问题仅限于与硬件平台无关的差异,并且大多数情况下也是软件.是否有任何与机器无关的性能差异?

编辑:我不知道这是一个重复.另一个问题是将参考传递(上游代码)与传递值(下图)进行比较:

not-void function-name (not-void arg)
Run Code Online (Sandbox Code Playgroud)

这跟我的问题不一样.我的重点不在于将参数传递给函数的更好方法.我关注的是这是更好的方式来传递一个结果来自外部范围的变量.

c++ performance function return-value pass-by-reference

70
推荐指数
5
解决办法
2万
查看次数

为什么在Effective C++中以这种方式定义声明和定义?

有效的C++(第3版),第2项(身高const,enuminline#define),为类特定常量代码段读:

class GamePlayer {
private:
    static const int NumTurns = 5;    // constant declaration
    int scores[NumTurns];             // use of constant
    ...
};
Run Code Online (Sandbox Code Playgroud)

然后,本书(用我自己的话说)static const int NumTurns = 5;不是一个定义,这通常是C++对类成员所要求的,除非它是一个从不使用地址的静态整数常量.如果上面的常量不是真的,或者编译器因任何原因坚持定义,那么定义应该在实现文件中提供如下:

const int GamePlayer::NumTurns;    // definition of NumTurns; see
                                   // below for why no value is given
Run Code Online (Sandbox Code Playgroud)

根据这本书(也用我自己的话说),定义中没有给出任何价值,因为它已在声明中给出.

这让我认为我已经知道的声明和定义的定义令人困惑(我在问这个问题之前在Google上仔细检查过):

  • 为什么static const int NumTurns = 5不是定义?是NumTurns不是初始化为5这里的值,是不是当声明和定义一起出现时,它被称为初始化?
  • 为什么static积分常数不需要定义?
  • 为什么第二个代码片段在没有定义值时被认为是一个定义,但是包含该值的类中的声明仍然不是一个(基本上回到我的第一个问题)?
  • 是不是初始化定义?为什么这里没有违反"唯一定义"规则?

有可能我现在只是在这里混淆自己,所以有人可以从头开始重新教育我:为什么这两行代码声明和定义而不是另一行,那里有任何初始化实例吗?初始化也是定义吗?

信用:代码片段直接从本书中引用.

编辑:附加参考定义和声明之间的区别是什么? …

c++ effective-c++

21
推荐指数
3
解决办法
1114
查看次数

将标签与输入垂直对齐

我目前正在将旧的HTML表单转换为不使用表格.标签需要固定的宽度,我已经使用本网站的答案实现了这一点.目前的代码如下:

HTML

<div id="form">
    <label for="field1">Name&nbsp;</label>
    <input type="text" id="field1" value="default name" />
</div>
Run Code Online (Sandbox Code Playgroud)

CSS

label {
    float: left;
    width: 50px;
    white-space: nowrap;
}
input {
    display: block;
    overflow: hidden;
    width: *;
}
#field1 {
    width: 150px;
}
Run Code Online (Sandbox Code Playgroud)

目前,标签在顶部垂直对齐.如何将标签和字段垂直对齐到中心?

编辑:我得到了很多答案,基本上通过指定的像素数将标签填充到正确的位置.我不想这样做,因为它基本上是硬编码而不是真正的垂直对齐到中间.

根据我在这里收到的一些建议,我已经清理了一些代码.请参阅以上编辑的代码.

我试过vertical-align: middle;label,但它不工作.请注意,用户的平台将是IE.

html css vertical-alignment

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

探索算法

大量编辑此问题以使其更容易理解.

鉴于任意尺寸的环境和任意数量障碍物的任意定位,我有一个探测环境的探测器,视野范围有限(障碍物不会阻挡视线).它可以在NSEW的四个主要方向上移动,一次一个单元格,并且图形未加权(每个步骤的成本为1).下面链接的是一张地图,代表了代理商(黄人)当前对规划时的环境信念.当代理正在计划时,时间不会通过模拟.

http://imagizer.imageshack.us/a/img913/9274/qRsazT.jpg

考虑到允许重新访问单元格,我可以使用哪种探索算法来最大化效用的成本效益?每个单元格都包含实用值.理想情况下,我会寻求最大化SEEN(未访问)所有单元的效用之和除以路径长度,尽管如果对于任何合适的算法来说太复杂,那么看到的单元数就足够了.存在最大路径长度,但通常为数百或更高.(我的代理上使用的实际测试环境至少要大4倍,尽管理论上可以设置的维度没有上限,因此最大路径长度会相应增加)

我认为BFS和DFS是难以处理的,A*由于缺乏合适的启发式而不是最优的,而Dijkstra不适合生成单一的完整路径.有没有你能想到的算法?另外,我需要有关循环检测的帮助,因为我之前从未这样做,因为允许重新访问是我的第一次.

我考虑过的一种方法是将映射缩减为生成树,除了不将其定义为连接所有单元的树,而是将其定义为可以查看所有单元的树.我的方法将产生以下结果:

http://imagizer.imageshack.us/a/img910/3050/HGu40d.jpg

在结果树中,代理可以从节点到达交叉点处0-1转的任何相邻节点.就我现在的想法而言.使用这棵树生成的解决方案可能不是最优的,但它至少应该接近最优,而算法处理的单元更少,所以如果这会使算法更容易处理,那么我想这是可以接受的交易.我仍然在考虑如何为此生成一条路径.

algorithm search artificial-intelligence agent

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

什么时候使用参考?

我对引用的理解是,它们是现有变量的别名-它们不能为null。它们在修改原始输入时对于函数调用很有用,因为引用被认为比指针安全。

除上述内容外,在引用是强制性的情况下,是否还有其他原因/用例来使用引用,而不是引用所指向的现有变量

编辑:请注意,我说除了上述内容。意思是我想知道其他什么时候引用在调用函数之外有用(什么时候不需要)(我已经知道了)。我还特别想知道什么时候引用比原始变量更受青睐,而不是指针(我已经从另一个问题中学到了“在可能的情况下使用引用,在必须时使用指针”在两者之间进行选择时)。

c++ reference

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

我可以有条件地选择要分配的变量吗?

本质上与此问题相同,但对于C++.

最简单的方法是:

if (condition) {
    a = f(x);
} else {
    b = f(x);
}
Run Code Online (Sandbox Code Playgroud)

虽然这满足了我的需求,但我一直不得不重复键入f(x)两次,更不用说在只有一行执行时将代码扩展到这么多行.如果我有更多的目标变量可供选择怎么办?

switch(condition variable) {
case 1:
    var1 = f(x);
    break;
case 2:
    var2 = f(x);
    break;
...
case y:
    vary = f(x);
    break;
}
Run Code Online (Sandbox Code Playgroud)

这看起来非常不优雅.

C++中有什么东西可以让我做以下几点吗?

do-something-that-returns-a-lvalue = f(x);
Run Code Online (Sandbox Code Playgroud)

请原谅我,如果它不被称为左值,我仍然是相对较新的C++.但是你们知道我的意思 - 为其分配值的目标变量.

c++ variable-assignment

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

阅读有效,更有效和有效的现代C++(和STL)的首选顺序是什么?

我知道更有效的C++是有效C++的扩展,而有效的现代C++则专注于C++ 11和14.作为语言的新手并且刚开始使用这些书籍,我应该在前两个之后阅读Effective Modern吗?此外,有效STL适合哪里?

阅读上述书籍的首选顺序是什么,因为每本书都是基于先前书籍的内容?(假设里面的一切对我来说都是新的?)

另外,Effective Modern C++是否被认为是Effective C++的非官方下一版?

c++ effective-c++

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

如何在 Flexbox 中并排设置两个 div 的宽度相等?

参考CSS并排div的自动相等宽度,我正在寻求解决同样的问题,只是我正在使用flexbox并且不希望对我正在显示的内容使用表格样式。

https://jsfiddle.net/rdh61g7c/

#outer {
  width: 1024px;
  height: 768px;
  
  display: flex;
  justify-content: center;
  align-items: center;
}
Run Code Online (Sandbox Code Playgroud)
<div id="outer">
  <div class="inner">Inner HTML content has larger natural width</div>
  
  <div class="inner">Inner HTML content has smaller natural width</div>
</div>
Run Code Online (Sandbox Code Playgroud)

因此,两列的宽度将随着其内容而拉伸,但左列将具有更大的宽度。为了保持两列关于中心对称,我需要将当前宽度比左列短的右列增加到等于左列。我如何在 Flexbox 布局中做到这一点?

编辑:我看到很多答案基本上都为两个容器分配了固定宽度(~50%)。那不是我要找的。左边的容器可以自由拉伸到内容需要的任何宽度,但有最大值,并且不应该被触及。右侧容器需要扩大其宽度以匹配左侧容器。

这可以在不借助 JavaScript 的情况下完成吗?

html css flexbox

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

今天我还需要 __future__ 吗?

我对Python模块的用例不是很熟悉__future__,只是我在一些在线文章的演示代码中看到过它。读完之后,我想这与面向未来的现有代码有关?我承认我并不完全理解我正在读的内容。根据官方文档,其功能为:

\n
\n
    \n
  • 为了避免混淆分析导入语句并期望找到它们\xe2\x80\x99正在导入的模块的现有工具。
  • \n
  • 为了确保 future 语句在 2.1 之前的版本下运行至少会产生运行时异常(future的导入将会失败,因为在 2.1 之前没有该名称的模块)。
  • \n
  • 记录何时引入不兼容的更改,以及何时将这些更改强制为 \xe2\x80\x94 或 \xe2\x80\x94。这是一种可执行文档的形式,可以通过导入future并检查其内容以编程方式进行检查。
  • \n
\n
\n

第1点是什么意思?是不是说如果解释器读取导入语句,但没有找到它正在导入的模块,那么拥有import __future__将阻止它抛出错误?

\n

随着 Python 2.7 于 2020 年 1 月 1 日正式终止,如果我无意在我的 Python 3 代码中支持 Python 2 环境,那么我认为第 2 点与我无关。

\n

我猜第 3 点是为了……调试?这就是它想表达的吗?

\n

我注意到到目前为止我读过的所有文章都至少是五年前的。所有示例都重点关注处理 Python 2 向后兼容性的 Python 3 代码,特别print//. 但正如我所说,我无意支持 Python 2。

\n

Python 中 __future__ 的用途是什么,如何/何时使用它,以及它是如何工作的

\n

import __future那么,如果不打算向后兼容 Python 2,我什么时候需要在 …

python python-3.x

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

如何在 React 中显示 FastAPI 的 Fileresponse 图像?

这是我的前端 React 代码:

import * as React from 'react';
import { useEffect, useState } from 'react';

import http from './http-common'; // axios

type Photo = {
  filename: string,
  caption: string,
  tags: string[].
};

const BrowserArticle = ({ filename, caption, tags }: Photo) => {
  const [photoFile, setFile] = useState<string>('');

  useEffect(() => {
    http.get(`/api/getImg/${filename}`)
      .then((response) => {
        console.log(typeof response.data); // console output is 'string'
        console.log(response); // see screenshot below
        setFile(data);
      });
  }, []);

  return (
    <div>
      <img src={photoFile} alt={filename} />
      <div>{caption}</div> …
Run Code Online (Sandbox Code Playgroud)

javascript jsx typescript reactjs fastapi

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