小编mas*_*oud的帖子

基于C++ 11范围的循环:按值获取项目或引用const

读取基于范围环的一些例子他们建议两种主要方式1,2,3,4

std::vector<MyClass> vec;

for (auto &x : vec)
{
  // x is a reference to an item of vec
  // We can change vec's items by changing x 
}
Run Code Online (Sandbox Code Playgroud)

要么

for (auto x : vec)
{
  // Value of x is copied from an item of vec
  // We can not change vec's items by changing x
}
Run Code Online (Sandbox Code Playgroud)

好.

当我们不需要更改vec项目时,IMO,示例建议使用第二个版本(按值).为什么他们不提出const引用的内容(至少我没有找到任何直接的建议):

for (auto const &x : vec) // <-- see …
Run Code Online (Sandbox Code Playgroud)

c++ c++11

199
推荐指数
3
解决办法
8万
查看次数

std :: dynarray vs std :: vector

C++ 14提出std::dynarray:

std :: dynarray是一个序列容器,它封装了一个在构造时固定的大小的数组,并且在整个对象的生命周期内不会改变.

std::dynarray必须在运行时分配,如同std::vector.

那么std::dynarray我们可以使用std::vector哪些更有活力(又重新调整大小)的好处和用途是什么?

c++ stdvector

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

std :: function如何工作

你知道,我们可以将lambda函数包装或存储到std::function:

#include <iostream>
#include <functional>
int main()
{
    std::function<float (float, float)> add = [](float a, float b)
    //            ^^^^^^^^^^^^^^^^^^^^
    {
        return a + b;
    };

    std::cout << add(1, 2) << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

我的问题是std::function,你可以看到它是一个模板类,但它可以接受任何类型的函数签名.

例如,float (float, float)在这种形式return_value (first_arg, second_arg).

std::function它的结构是什么以及如何接受函数签名x(y,z)以及如何使用它?是float (float, float)C++中一个新的有效表达式?

c++ c++11

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

非交叉线段,同时最小化累积长度

我想找到一个更好的算法来解决以下问题:

2D中有N个起点(紫色)和N个目标点(绿色).我想要一种算法,通过线段(棕色)将起始点连接到目标点,而没有任何这些段相交(红色),同时最小化所有段的累积长度.

我在C++中的第一个努力就是置换所有可能的状态,找到无交叉状态,以及总段长度最小为 O(n!)的状态.但我认为必须有更好的方法.

在此输入图像描述

任何的想法?或者搜索好的关键词?

c++ algorithm performance geometry

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

RVO(返回值优化)是否适用于所有对象?

RVO(返回值优化)是否保证适用于C++编译器(特别是GCC)中的所有对象和情境?

如果答案是"否",那么对类/对象进行优化的条件是什么?如何强制或鼓励编译器对特定的返回值执行RVO?

c++ optimization gcc

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

C++连接__FILE__和__LINE__宏?

我希望我的异常消息包含有关异常位置的信息.

所以我想有一些类似的东西.

#define LOCATION __FILE__ " : " __LINE__

throw std::exception(std::string("ABCD. ") + LOCATION);
Run Code Online (Sandbox Code Playgroud)

这个定义显然是不正确的.怎么做到这一点?

c++

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

C++中的声明点

101当我将之前的内容分配x给新的时,为什么不输出x

int x = 101;
{
    int x = x;
    std::cout << x << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

输出(垃圾):

422634

我认为第二个x将初始化为101 但它没有初始化.

注意:在这种情况下的解决方案是int x = ::x但问题是它发生的原因.

c++

33
推荐指数
2
解决办法
1705
查看次数

如何按名称杀死进程?(Win32 API)

基本上,我有一个不止一次推出的程序.因此,该计划将启动两个或更多流程.

我想使用Win32 API并使用特定名称终止/终止所有进程.

我已经看到了杀死进程的示例,但没有看到具有完全相同名称(但参数不同)的多个进程.

c api winapi

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

在gcc-4.8中预先计算(C++ 11)

在旧测试代码gcc-4.4.0gcc-4.6.4,编译器能够应用智能优化和预计算的结果const输入:

#include <iostream>
#include <chrono>
using namespace std;

const auto N = 1000000000ULL;  // constexptr is tested, no effect

unsigned long long s(unsigned long long n)
{
    auto s = 0ULL;
    for (auto i = 0ULL; i < n; i++)
        s += i;
    return s;
}

int main()
{
    auto t1 = std::chrono::high_resolution_clock::now();

    auto x = s(N);

    auto t2 = std::chrono::high_resolution_clock::now();
    auto t = std::chrono::duration_cast<std::chrono::nanoseconds>(t2-t1).count();
    cout << "Result: " << x << …
Run Code Online (Sandbox Code Playgroud)

c++ gcc c++11

23
推荐指数
2
解决办法
2325
查看次数

使用std :: function和std :: bind时,模板参数推导/替换失败

在模板化成员函数中使用std :: function时出现编译错误,以下代码是一个简单示例:

#include <functional>
#include <memory>
using std::function;
using std::bind;
using std::shared_ptr;

class Test {
public:
     template <typename T>
     void setCallback(function<void (T, int)> cb); 
};

template <typename T>
void Test::setCallback(function<void (T, int)> cb)
{
    // do nothing
}

class TestA {
public:
    void testa(int a, int b) {   }
};


int main()
{
    TestA testA;
    Test test;
    test.setCallback(bind(&TestA::testa, &testA, std::placeholders::_1, std::placeholders::_2));
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

并带来以下编译错误:

testtemplate.cpp:在函数'int main()'中:

testtemplate.cpp:29:92:错误:没有匹配的函数调用"测试:: setCallback(STD :: _ Bind_helper)(INT,INT),种皮,常量性病:: _占位符<1>&,常量性病:: _占位符<2>&> ::类型)"

testtemplate.cpp:29:92:注意:候选者是:testtemplate.cpp:10:7:注意:模板void test :: setCallback(std …

c++ templates bind function

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

标签 统计

c++ ×9

c++11 ×3

gcc ×2

algorithm ×1

api ×1

bind ×1

c ×1

function ×1

geometry ×1

optimization ×1

performance ×1

stdvector ×1

templates ×1

winapi ×1