javascript

java

python

c#

node.js

reactjs

android

php

c++

ruby-on-rails

html

jquery

git

css

ios

sql

.net

c

<img src="//i.stack.imgur.com/bk9VA.png" alt="" class="sponsor-tag-img" width="18" height="16"/>android

string

c ++ - 'size_t'对'容器:: size_type'

container::size_typesize_type之间的差异?

据我所知,container::size_type是更通用的,可用于任何size_types。

但是container::size_type是否针对特定种类的容器进行了优化?

trans by 2019-08-19T00:29:37Z

在C ++中实现长方程时,如何通过高级方法提高性能

我正在开发一些工程模拟。 这包括实现一些长方程,例如这个方程,以计算橡胶类材料中的应力:

T = (
    mu * (
            pow(l1 * pow(l1 * l2 * l3, -0.1e1 / 0.3e1), a) * a
            * (
                pow(l1 * l2 * l3, -0.1e1 / 0.3e1)
                - l1 * l2 * l3 * pow(l1 * l2 * l3, -0.4e1 / 0.3e1) / 0.3e1
            ) * pow(l1 * l2 * l3, 0.1e1 / 0.3e1) / l1
            - pow(l2 * pow(l1 * l2 * l3, -0.1e1 / 0.3e1), a) * a / l1 / 0.3e1
            - pow(l3 * pow(l1 * l2 * l3, -0.1e1 / 0.3e1), a) * a / l1 / 0.3e1
        ) / a
    + K * (l1 * l2 * l3 - 0.1e1) * l2 * l3
) * N1 / l2 / l3

+ (
    mu * (
        - pow(l1 * pow(l1 * l2 * l3, -0.1e1 / 0.3e1), a) * a / l2 / 0.3e1
        + pow(l2 * pow(l1 * l2 * l3, -0.1e1 / 0.3e1), a) * a
        * (
            pow(l1 * l2 * l3, -0.1e1 / 0.3e1)
            - l1 * l2 * l3 * pow(l1 * l2 * l3, -0.4e1 / 0.3e1) / 0.3e1
        ) * pow(l1 * l2 * l3, 0.1e1 / 0.3e1) / l2
        - pow(l3 * pow(l1 * l2 * l3, -0.1e1 / 0.3e1), a) * a / l2 / 0.3e1
    ) / a
    + K * (l1 * l2 * l3 - 0.1e1) * l1 * l3
) * N2 / l1 / l3

+ (
    mu * (
        - pow(l1 * pow(l1 * l2 * l3, -0.1e1 / 0.3e1), a) * a / l3 / 0.3e1
        - pow(l2 * pow(l1 * l2 * l3, -0.1e1 / 0.3e1), a) * a / l3 / 0.3e1
        + pow(l3 * pow(l1 * l2 * l3, -0.1e1 / 0.3e1), a) * a
        * (
            pow(l1 * l2 * l3, -0.1e1 / 0.3e1)
            - l1 * l2 * l3 * pow(l1 * l2 * l3, -0.4e1 / 0.3e1) / 0.3e1
        ) * pow(l1 * l2 * l3, 0.1e1 / 0.3e1) / l3
    ) / a
+ K * (l1 * l2 * l3 - 0.1e1) * l1 * l2
) * N3 / l1 / l2;

我使用Maple生成C ++代码以避免错误(并通过繁琐的代数节省时间)。 由于此代码执行数千次(如果不是数百万次),性能是一个问题。 不幸的是,到目前为止数学只是简化了; 长方程是不可避免的。

我可以采取什么方法来优化此实施? 我在寻找实施这些方程式时应该应用的高级策略,而不一定是针对上述示例的特定优化。

我正在使用g ++与pow(x, 0.1e1/0.3e1)进行编译。

更新:

我知道有很多重复的表达式,我假设编译器会处理这些; 到目前为止我的测试表明它确实如此

pow(x, 0.1e1/0.3e1)都是正实数(不为零)。

我已将pow(x, 0.1e1/0.3e1)替换为等效变量:cbrt(x)。这确实有助于提高性能。

cbrt(x)替换pow(x, 0.1e1/0.3e1)是一个很好的建议。

这将在CPU上运行,在不久的将来,这可能会在GPU上运行得更好,但目前该选项不可用。

trans by 2019-08-18T13:22:43Z

c ++ - boost :: flat_map及其与map和unordered_map相比的性能

编程中的常识是,由于缓存命中,内存局部性会大大提高性能。 我最近发现了大约boost::flat_map这是一个基于矢量的地图实现。 它似乎并不像你的典型map/unordered_map那么受欢迎,所以我还没能找到任何性能比较。 它是如何比较的,它的最佳用例是什么?

谢谢!

trans by 2019-08-18T09:56:32Z

c ++ - “未定义的行为”是否真的允许*发生任何事情?

这个问题在这里已有答案:

  • 未定义,未指定和实现定义的行为                                     9个答案

编辑:这个问题并不是一个讨论未定义行为的(de)优点的论坛,而是它的成果。 在任何情况下,这个关于假设的C编译器没有未定义行为的线程可能对那些认为这是一个重要主题的人更感兴趣。


&#34;未定义行为的典型假冒例子&#34; 当然是&#34;鼻子恶魔&#34; - 无论C和C ++标准允许什么,物理上都是不可能的。

因为C和C ++社区倾向于强调未定义行为的不可预测性以及允许编译器在遇到未定义行为时使程序完全做任何事情的想法,所以我假设标准没有任何限制 关于行为,以及未定义的行为。

但C ++标准中的相关引用似乎是:

[C++14: defns.undefined]: [..]允许的未定义行为包括完全忽略不可预测的结果,在转换或程序执行期间以环境特征(有或没有发出诊断消息)的文档方式执行,终止翻译或 执行(发出诊断消息)。[..]

这实际上指定了一小组可能的选项:

  • 忽略这种情况 - 是的,标准继续说这会产生&#34;不可预测的结果&#34;,但这与编译器插入代码不同(我认为这是先决条件 ,你知道,鼻子恶魔)。
  • 以文件化的方式表现环境 - 这实际上听起来相对温和。 (我当然没有听说过有任何记录的鼻腔恶魔病例。)
  • 终止翻译或执行 - 使用诊断,不能少。 那个UB会表现得那么好吗?

我假设在大多数情况下,编译器选择忽略未定义的行为; 例如,当读取未初始化的内存时,可能是插入任何代码以确保一致行为的反优化。 我认为陌生人类型的未定义行为(例如&#34;时间旅行&#34;)将属于第二类 - 但这需要记录这些行为并且&#34;环境的特征&#34; (所以我猜鼻腔恶魔只能由地狱计算机产生?)。

我误解了这个定义吗? 这些仅仅是可能构成未定义行为的例子,而不是一个全面的选项列表吗? 声称&#34;任何事情都可能发生&#34; 仅仅意味着忽视这种情况的意外副作用?

编辑:两个小问题澄清:

  • 我认为从原始问题中可以清楚地看出,我认为对大多数人来说都是如此,但无论如何我都会说出来:我确实意识到了这一点,并且#34;鼻子恶魔&#34; 是诙谐的。
  • 请不要写一个(其他)答案,解释UB允许特定于平台的编译器优化,除非您还解释了它如何允许实现定义的行为不允许的优化。
trans by 2019-08-18T09:41:11Z

c ++ - 内联变量如何工作?

在2016年奥卢ISO C ++标准会议上,一项名为Inline Variables的提案被标准委员会投票选为C ++ 17。

在外行人的术语中,什么是内联变量,它们如何工作以及它们对什么有用? 如何声明,定义和使用内联变量?

trans by 2019-08-18T05:52:43Z

c ++ - 删除vs删除[]

可能重复:
(POD)释放内存:删除[]等于删除?

当我被教授C ++时,这是很久以前的事了。 有人告诉我永远不要使用deletedelete[]对单个对象执行delete[]将相当于delete.知道不要太信任老师我想知道,这是真的吗?

有没有理由拨打delete而不是delete[]

我在SO中扫描了可能相关的问题,但没有找到任何明确的答案。

trans by 2019-08-18T04:53:30Z

c ++ - 使用QMessageBox的是/否消息框

如何在Qt中显示带有是/否按钮的消息框,如何检查按下哪个按钮?

即 一个如下所示的消息框:

enter image description here

trans by 2019-08-14T18:28:55Z

如何从C ++中的字符串中删除某些字符?

例如,我有一个用户输入电话号码。

cout << "Enter phone number: ";
INPUT: (555) 555-5555
cin >> phone;

我想删除&#34;(&#34;,&#34;)&#34;和&#34; - &#34; 字符串中的字符。 我查看了字符串删除,查找和替换功能但是我只看到它们根据位置操作。

是否有一个字符串函数可用于传递字符,&#34;(&#34;例如,让它删除字符串中的所有实例?

trans by 2019-08-14T12:53:17Z

c ++ - std :: min给出

#include <algorithm>
#include <Windows.h>

int main()
{
    int k = std::min(3, 4);
    return 0;
}

什么是Windows正在做,如果我包括Windows.h我不能在Visual Studio 2005中使用std :: min。错误消息是:

error C2589: '(' : illegal token on right side of '::'
error C2059: syntax error : '::'
trans by 2019-08-14T08:17:24Z

c ++ - 如何使用可变消息抛出std :: exceptions?

这是我想要向异常添加一些信息时经常做的一个例子:

std::stringstream errMsg;
errMsg << "Could not load config file '" << configfile << "'";
throw std::exception(errMsg.str().c_str());

有没有更好的方法呢?

trans by 2019-08-14T04:32:13Z

如何使用CM将C ++程序与Boost链接

我的CMake文件在将我的程序与Ubuntu下的Boost库链接时应该是什么样的?

运行make期间显示的错误:

main.cpp:(.text+0x3b): undefined reference to `boost::program_options::options_description::m_default_line_length'

主文件非常简单:

#include <boost/program_options/options_description.hpp>
#include <boost/program_options/option.hpp>
using namespace std;
#include <iostream>

namespace po = boost::program_options;

int main(int argc, char** argv) {

    po::options_description desc("Allowed options");
    desc.add_options()
        ("help", "produce help message")
        ;

    return 0;
}

我设法做到了。 我添加到CMake文件的唯一行是:

target_link_libraries(
my_target_file
${Boost_PROGRAM_OPTIONS_LIBRARY}
)
trans by 2019-08-14T03:12:45Z

我在哪里可以获得“有用的”C ++二进制搜索算法?

我需要一个与C ++ STL容器兼容的二进制搜索算法,如标准库的upper_bound标题中的boost::binary_search,但我需要它来返回指向结果的迭代器,而不是一个简单的布尔告诉我是否 元素存在。

(另一方面,当他们为binary_search定义API时,标准委员会在想什么?!)

我主要担心的是我需要二进制搜索的速度,所以尽管我可以用其他算法找到数据,如下所述,我想利用我的数据被排序以获得二进制的好处这一事实 搜索,而不是线性搜索。

到目前为止boost::binary_searchupper_bound如果缺少原点则失败:

//lousy pseudo code
vector(1,2,3,4,6,7,8,9,0) //notice no 5
iter = lower_bound_or_upper_bound(start,end,5)
iter != 5 && iter !=end //not returning end as usual, instead it'll return 4 or 6

注意:只要与容器兼容,我也可以使用不属于std命名空间的算法。 比方说,像boost::binary_search

trans by 2019-08-13T23:13:45Z

性能 - C ++中的高效字符串连接

我听到一些人表达了对&#34; +&#34;的担忧。 std :: string中的运算符以及加速连接的各种变通方法。 这些都真的有必要吗? 如果是这样,在C ++中连接字符串的最佳方法是什么?

trans by 2019-08-13T22:39:11Z

c ++ - 为什么++ x是左值而x ++是右值?

这个问题在这里已有答案:

  • 前/后增量的左值和右值                                     1个答案

所以我一直在阅读左值和左值,我对++xx++之间的差异感到有些困惑。

为什么++x是左值,而x++是左值?

trans by 2019-08-13T17:42:37Z

何时调用C ++析构函数?

基本问题:一个程序什么时候打电话给一个班级&#39; C ++中的析构函数方法? 有人告诉我,只要一个物体超出范围或受到delete的影响就会被调用

更具体的问题:

1)如果通过指针创建对象并且稍后删除该指针或给出指向的新地址,那么它所指向的对象是否会调用其析构函数(假设没有其他指向它)?

2)关注问题1,什么定义了一个对象何时超出范围(不是关于对象何时离开给定的{block})。 那么,换句话说,什么时候是一个析构函数调用链表中的对象?

3)你想要手动调用析构函数吗?

trans by 2019-08-13T14:39:47Z

c ++ - 什么时候不应该使用虚拟析构函数?

是否有充分的理由不为类声明虚拟析构函数? 什么时候应该特别避免写一个?

trans by 2019-08-13T10:34:37Z

适用于Windows的LLVM C ++ IDE

是否有适用于Windows的C / C ++ IDE,它与LLVM编译器(和Clang C / C ++分析器)集成,就像现代Xcode一样。

我有Dev-Cpp(它使用过时的GCC)和Code :: Blocks(带有一些GCC)。 但GCC给了我非常神秘的错误信息。 我想从Clang前端获得一些用户友好的错误消息。

是的,Clang无法用于复杂的C ++代码,但是主干Clang已经可以编译LLVM本身了。 所以我想知道是否有任何LLVM IDE正在开发或测试版中。

是的,我可以使用Clang作为其他编译器与GCC兼容的IDE。 但是有没有与Clang集成的IDE? Clang具有不同的输出格式,因此IDE必须解析它。 Clang可以提供IDE解析源。 Clang有一个分析选项,必须在IDE中支持。 看看,例如[http://iosdevelopertips.com/xcode/static-code-analysis-clang-and-xcode-3-2.html]

并且Clang最需要的功能是智能自动完成功能,因此IDE只能建议使用语法正确的变体,例如: 仅列出此结构的类字段,类。

结果:(从答案中合并):

  • 使用CDT&gt; = 8的Eclipse和来自Petri Tuononen的[https://code.google.com/archive/p/llvm4eclipsecdt/]插件(无智能自动完成)
  • 来自LLVM项目的vim与vimrc(仅智能完成?)[https://llvm.org/viewvc/llvm-project/llvm/trunk/utils/vim/]
  • Emacs(仅限智能完成?)[https://llvm.org/svn/llvm-project/cfe/trunk/utils/clang-completion-mode.el]
  • Qt Creator:[https://blog.qt.io/blog/2011/10/19/qt-creator-and-clang/]
  • CodeLite:[http://www.codelite.org/LiteEditor/ClangIntegration35]
trans by 2019-08-13T10:15:51Z

c ++ - 如何传递一个需要自由函数的成员函数?

问题如下:考虑这段代码:

#include <iostream>


class aClass
{
public:
    void aTest(int a, int b)
    {
        printf("%d + %d = %d", a, b, a + b);
    }
};

void function1(void (*function)(int, int))
{
    function(1, 1);
}

void test(int a,int b)
{
    printf("%d - %d = %d", a , b , a - b);
}

int main (int argc, const char* argv[])
{
    aClass a();

    function1(&test);
    function1(&aClass::aTest); // <-- How should I point to a's aClass::test function?

    return 0;
}

如何使用aaClass::test作为function1的参数? 我坚持这样做。

我想访问该班级的成员。

trans by 2019-08-13T06:25:44Z

C / C ++程序的最大堆栈大小

我想在100 X 100阵列上进行DFS。 (假设数组的元素代表图形节点)因此,假设最坏的情况,递归函数调用的深度可以达到10000,每个调用占用20个字节。 那么可行的方法是否存在stackoverflow的可能性?

C / C ++中堆栈的最大大小是多少?

请为两者指定gcc
1)Windows上的cygwin
2)Unix

一般限制是什么?

trans by 2019-08-13T05:58:25Z

c# - 一起计算sin和cos的最快方法是什么?

我想一起计算一个值的正弦和正弦值(例如创建一个旋转矩阵)。 当然我可以像sincos一样一个接一个地计算它们,但我想知道在需要两个值时是否有更快的方法。

编辑:总结到目前为止的答案:

  • 弗拉德说,有asm命令sincos计算它们(几乎与单独调用sincosf的时间相同)

  • 像Chi注意到的那样,这种优化有时已经由编译器完成(当使用优化标志时)。

  • caf指出,功能sincossincosf可能是可用的,只需包括math.h即可直接调用

  • 讨论使用查找表的tanascius方法存在争议。 (但是在我的计算机和基准测试场景中,它运行速度比sincos快3倍,而32位浮点的精度几乎相同。)

  • Joel Goodwin与一种非常快速逼近技术的有趣方法相关联,具有非常好的准确性(对我来说,这比查表更快)

trans by 2019-08-13T03:54:44Z

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 下一页 共83页