c++ - 在 C++11 中对 vector 使用 for each

标签 c++ c++11 vector

<分区>

我想遍历一个结构指针 vector 并对每个指针做一些工作。在使用谷歌和这个网站研究了这个问题之后,我一直在尝试使用以下代码,但是没有运气让代码编译。

我使用的循环如下,我试过两种

for (auto & i : Mg_Server::servers)
{
    printf("%s\n", i->server_ctx->ns_server->server_data);
}

/*
for (vector<Mg_Server::mg_instance *>::size_type i = 0; i != Mg_Server::servers.size; ++i)
{
    printf("%s\n", Mg_Server::servers[i]->server_ctx->ns_server->server_data);
}*/

我的 vector 在头文件中被声明为静态的

class Mg_Server {

public:
    Mg_Server(){}
    ~Mg_Server(){}

   // functions

private:

    struct mg_instance{
        struct mg_server * server_ctx;
        bool running;
    };

    // stuff

    static vector<mg_instance *> servers;

};

并且我已经在 cpp 文件中使用实例化了 vector

vector<Mg_Server::mg_instance *> Mg_Server::servers;

我正在使用 CentOS 5.8 编译这段代码

g++44 -Wall -c -std=c++0x "some include directories" -g -D LINUX -m64 -ansi src/mg_server.cpp

我收到以下错误。第 58 行是 if 语句在 for 循环之后开始的地方。

src/mg_server.cpp:47: warning: ‘auto’ will change meaning in C++0x; please remove it
src/mg_server.cpp:47: error: expected initializer before ‘:’ token
src/mg_server.cpp:58: error: expected primary-expression before ‘if’
src/mg_server.cpp:58: error: expected ‘;’ before ‘if’
src/mg_server.cpp:58: error: expected primary-expression before ‘if’
src/mg_server.cpp:58: error: expected ‘)’ before ‘if’

我应该如何在 C++0x 中迭代 vector ?

最佳答案

g++4.4 不支持基于范围的 for 循环。查看gcc C++11 status页。 4.6 版中添加了支持。你应该upgrade your compiler .

如果您无法这样做,您应该使用 Boost.Foreach ,或者继续使用迭代器。

关于c++ - 在 C++11 中对 vector 使用 for each,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23701486/

相关文章:

c++ - 为 std::ifstream 表达 "read-only, no modification of position"

c++ - 数组的 constexpr 初始化以对内容进行排序

java - 使用Java中的Kinect数据集计算两条线(代表人的 ARM )之间的角度

c++ - C 编译 : error: stray '\4' in program ; octal flow?

c++ - std::strftime 的返回值

c++ - 如何计算图像中每个 block 的直方图,然后将它们连接起来?

c++ - 在子类中重写时我应该重用虚拟吗?

vector - 两个3D向量之间的X角?

C++ std::vector<uint8> 已填充,但未显示数据

c++ - 使用 jsoncpp 将 json 数据增量写入文件