迭代向量<vector <?>&gt; with for_each </vector <?>

时间:2015-04-14 02:50:33

标签: c++ loops vector

我在使用for_each函数迭代vector<vector<?> >时遇到了一些麻烦。 每当我做这样的事情时(其中matrix是我的嵌套向量):

int size = 0;    
for_each(matrix.begin(), matrix.end(), [](vector<int> &vec) {
    size += vec.size();
});

然后编译器向我抱怨expected primary-expression before '[' token错误(有更多相同的错误,但有]&个字符。我究竟做错了什么? cppreference here上的示例与int的语法类似,那么是什么让它与众不同呢?

1 个答案:

答案 0 :(得分:2)

您确定要包含正确的标头using namespace std;(我更喜欢用std::显式加前缀,如下所示),并为您的编译器启用C ++ 11吗?您还需要捕获size。无论如何 - 工作代码:

#include <iostream>
#include <vector>
#include <algorithm>

int main()
{
    std::vector<std::vector<int>> matrix = { { 1, 2 }, {3, 4, 5}, {6} };
    size_t size = 0;
    std::for_each(matrix.begin(), matrix.end(), [&size](std::vector<int> &vec) {
        size += vec.size();
    });
    std::cout << size << '\n';
}

看到它运行here


关于评论中的问题:

  

如果它被另一个for_each循环所包围,该循环可以单独获取每个向量;会是什么样的?

您可以按如下方式使用嵌套的for_each循环,但它可能不是您在功能上需要的 - 无法从这样一个模糊的问题中辨别出来:

    std::for_each(matrix.begin(), matrix.end(),
        [&size, &matrix](std::vector<int>& outer_vec)
        {
            std::for_each(matrix.begin(), matrix.end(),
                [&size](std::vector<int> &vec)
                {
                    size += vec.size();
                });
        });