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++ 14提出std::dynarray:
std :: dynarray是一个序列容器,它封装了一个在构造时固定的大小的数组,并且在整个对象的生命周期内不会改变.
std::dynarray必须在运行时分配,如同std::vector.
那么std::dynarray我们可以使用std::vector哪些更有活力(又重新调整大小)的好处和用途是什么?
你知道,我们可以将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++中一个新的有效表达式?
我想找到一个更好的算法来解决以下问题:
2D中有N个起点(紫色)和N个目标点(绿色).我想要一种算法,通过线段(棕色)将起始点连接到目标点,而没有任何这些段相交(红色),同时最小化所有段的累积长度.
我在C++中的第一个努力就是置换所有可能的状态,找到无交叉状态,以及总段长度最小为 O(n!)的状态.但我认为必须有更好的方法.

任何的想法?或者搜索好的关键词?
RVO(返回值优化)是否保证适用于C++编译器(特别是GCC)中的所有对象和情境?
如果答案是"否",那么对类/对象进行优化的条件是什么?如何强制或鼓励编译器对特定的返回值执行RVO?
我希望我的异常消息包含有关异常位置的信息.
所以我想有一些类似的东西.
#define LOCATION __FILE__ " : " __LINE__
throw std::exception(std::string("ABCD. ") + LOCATION);
Run Code Online (Sandbox Code Playgroud)
这个定义显然是不正确的.怎么做到这一点?
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但问题是它发生的原因.
基本上,我有一个不止一次推出的程序.因此,该计划将启动两个或更多流程.
我想使用Win32 API并使用特定名称终止/终止所有进程.
我已经看到了杀死进程的示例,但没有看到具有完全相同名称(但参数不同)的多个进程.
在旧测试代码gcc-4.4.0和gcc-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) 在模板化成员函数中使用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 …