是否有一种容器适配器可以反转迭代器的方向,以便我可以使用基于范围的for-loop反向迭代容器?

使用显式迭代器,我将转换如下:

for (auto i = c.begin(); i != c.end(); ++i) { ...

到这个:

for (auto i = c.rbegin(); i != c.rend(); ++i) { ...

我想把它转换成:

for (auto& i: c) { ...

:

for (auto& i: std::magic_reverse_adapter(c)) { ...

有这样的东西吗,还是我必须自己写?

c++ 11允许内联命名空间,其所有成员也自动位于封闭的命名空间中。我想不出任何有用的应用程序——谁能给出一个简短的例子,说明需要内联名称空间的情况,以及它是最常用的解决方案的情况?

(此外,我不清楚在一个而不是所有声明中内联声明名称空间时会发生什么,这些声明可能位于不同的文件中。这不是自找麻烦吗?)

c++ 11基于范围的for()循环的常见示例总是这样简单:

std::vector<int> numbers = { 1, 2, 3, 4, 5, 6, 7 };
for ( auto xyz : numbers )
{
     std::cout << xyz << std::endl;
}

在这种情况下,xyz是int型。但是,当我们有地图之类的东西时会发生什么呢?本例中变量的类型是什么:

std::map< foo, bar > testing = { /*...blah...*/ };
for ( auto abc : testing )
{
    std::cout << abc << std::endl;         // ? should this give a foo? a bar?
    std::cout << abc->first << std::endl;  // ? or is abc an iterator?
}

当要遍历的容器很简单时,看起来基于范围的for()循环会给我们每个项,而不是迭代器。这很好…如果它是迭代器,我们总是要做的第一件事就是解引用它。

但是当涉及到像地图和multimaps这样的东西时,我很困惑。

(我还在g++ 4.4,而基于范围的循环在g++ 4.6+,所以我还没有机会尝试它。)

当我试图运行一个CMake生成的makefile来编译我的程序时,我得到的错误是

c++ 98模式不支持基于范围的for循环。

我尝试添加add_definitions(-std=c++0x)到我的CMakeLists.txt,但它没有帮助。

我也试过这个:

if(CMAKE_COMPILER_IS_GNUCXX)
    add_definitions(-std=gnu++0x)
endif()

当我执行g++——version时,我得到:

g+ (Ubuntu/Linaro 4.6.1- 9u阑尾3)4.6.1

我还尝试了SET(CMAKE_CXX_FLAGS "-std=c++0x"),这也不起作用。

我不明白如何使用CMake激活c++ 11特性。

你能用你自己的话解释一下STA和MTA吗?

另外,什么是公寓线程,它们只与COM有关吗?如果有,为什么?

我试图更新我的c++编译器到c++ 11。 我已经搜索了一点,我得出的结论是,我必须使用标志-std=c++0x或-std=gnu++0x,但我不知道很多关于标志的事情。有人能帮帮我吗?(我使用的是Ubuntu 12.04。)

以下是我试图使用c++ 11中包含的库(即数组)时从编译器得到的错误:

#include <array>
#include <iostream>

int main()
{
    std::array<int, 3> arr = {2, 3, 5};
    ...
}

该文件需要即将发布的ISO c++标准c++ 0x的编译器和库支持。这种支持目前是实验性的,必须使用-std=c++0x或-std=gnu++0x编译器选项来启用。

以下定义有区别吗?

const     double PI = 3.141592653589793;
constexpr double PI = 3.141592653589793;

如果不是,在c++ 11中首选哪种风格?

我有课

template<size_t N, size_t M>
class Matrix {
    // ....
};

我想创建一个类型定义,它创建了一个向量(列向量),相当于一个大小为N和1的矩阵。就像这样:

typedef Matrix<N,1> Vector<N>;

这会产生编译错误。下面创建类似的东西,但不是我想要的:

template <size_t N>
class Vector: public Matrix<N,1>
{ };

是否有解决方案或不太昂贵的变通方法/最佳实践?

我相当熟悉c++ 11的std::thread, std::async和std::future组件(例如,请看这个答案),这些都很简单。

然而,我不能完全理解std::promise是什么,它做什么以及在什么情况下最好使用它。标准文档本身除了类概要之外不包含大量信息,std::thread也不包含。

谁能给一个简要的例子,说明需要std::promise的情况,以及它是最常用的解决方案的情况?

在开始混淆之前,这个问题是关于Code,新的轻量级Visual Studio编辑器。 你可以从这里获得:https://code.visualstudio.com/

我有一个文本文件(.txt)与CSS在其中,并希望获得语法高亮显示。你可以用ctrl+shift+p打开命令面板。但是你不能像Sublime那样设置语法。

有没有其他方法从我的文本文件得到CSS着色?