我在使用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
的语法类似,那么是什么让它与众不同呢?
答案 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();
});
});