C++ 迭代器的基于范围的循环-为什么这样抱怨?
基本上,我有一个二维向量:C++ 迭代器的基于范围的循环-为什么这样抱怨?,c++,c++11,iterator,C++,C++11,Iterator,基本上,我有一个二维向量: std::vector<std::vector<double> > vect = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} }; 有关详细信息,请参阅帖子后面的评论 template<typename Inverse> void Diag(Inverse begin, Inverse end) { for(auto row = begin; row != end; row
std::vector<std::vector<double> > vect = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
有关详细信息,请参阅帖子后面的评论
template<typename Inverse>
void Diag(Inverse begin, Inverse end)
{
for(auto row = begin; row != end; row++)
{
for(auto col : *row)
{
}
}
}
模板
无效诊断(反向开始,反向结束)
{
对于(自动行=开始;行!=结束;行++)
{
用于(自动列:*行)
{
}
}
}
在这个回答中,我忽略了一个事实,即错误消息来自与您向我们展示的代码不同的代码段。但是,将(自动行:&begin)的更改为(自动行:begin)
的就足够恢复同步了
问题是ranged for需要一个容器,但您为它提供了一个迭代器,但最简单的解决方案是简单地用一个更传统的环路交换外部量程
出于性能考虑,也不要忘记通过引用进行迭代:
#include <vector>
#include <iostream>
std::vector<std::vector<double> > vect = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
template<typename Inverse>
void Diag(Inverse begin, Inverse end)
{
for(auto it = begin; it != end; ++it)
for(auto& col : *it)
std::cout << col << ' ';
}
int main()
{
Diag(std::begin(vect), std::end(vect));
}
#包括
#包括
标准::向量向量={
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
模板
无效诊断(反向开始,反向结束)
{
for(自动it=开始;it!=结束;++it)
用于(自动和列:*it)
std::cout谁抱怨了?你的妻子?@thang编译器,抱歉哈哈!发布编译器的准确错误消息。@thang更新了我的帖子:)你不想从头到尾吗?begin不是集合,所以你不能像(自动行:begin)那样使用集合循环请把这些评论带到你的答案中。评论会在任何时候消失。无论如何,我看不到任何“细节”。。。
template<typename Inverse>
void Diag(Inverse begin, Inverse end)
{
for(auto row = begin; row != end; row++)
{
for(auto col : *row)
{
}
}
}
#include <vector>
#include <iostream>
std::vector<std::vector<double> > vect = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
template<typename Inverse>
void Diag(Inverse begin, Inverse end)
{
for(auto it = begin; it != end; ++it)
for(auto& col : *it)
std::cout << col << ' ';
}
int main()
{
Diag(std::begin(vect), std::end(vect));
}