C++ 在基于嵌套范围的for循环中使用auto(用于迭代)
目前我已经开始使用C++ 在基于嵌套范围的for循环中使用auto(用于迭代),c++,c++11,vector,iterator,auto,C++,C++11,Vector,Iterator,Auto,目前我已经开始使用auto关键字。对此我有一些疑问: 如果我需要遍历向量,我会: vector<int>v; for(auto it : v){ cout << it <<endl; } vectorv; for(auto-it:v){ cout我假设您想使用auto和新的基于范围的进行循环 您可以创建一个vector\u视图,并在内部循环中迭代“子向量” 下面是一个简单的示例,让您开始学习(注意使用auto&而不是auto): E
auto
关键字。对此我有一些疑问:
如果我需要遍历向量
,我会:
vector<int>v;
for(auto it : v){
cout << it <<endl;
}
vectorv;
for(auto-it:v){
cout我假设您想使用auto
和新的基于范围的进行
循环
您可以创建一个vector\u视图
,并在内部循环中迭代“子向量”
下面是一个简单的示例,让您开始学习(注意使用auto&
而不是auto
):
EDIT:如果定义make\u vector\u view()
函数,则可以使语法不那么冗长:
template <typename T, typename A>
vector_view<T, A> make_vector_view(std::vector<T, A>& v,
size_t begin_,
size_t length_)
{
return {v, begin_, length_};
}
模板
向量视图生成向量视图(标准::向量&v,
大小\u t开始\u,
尺寸(长度)
{
返回{v,begin,length};
}
由于模板参数类型推断,您可以编写:
for(自动&it:v)
{
大小开始=标准::距离(&v[0],&it)+1;
size\u t length=v.size()-开始;
库特
是…的缩写
auto it = v.begin(); it != v.end(); it++
因此,要在嵌套for循环中使用auto,较长的版本更合适
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> v(10, 17);
for (auto& it = v.begin(); it != v.end(); ++it) {
for (auto& it2 = it + 1; it2 != v.end(); ++it2) {
cout << *it2 << " ";
}
cout << endl;
}
// system("pause");
return 0;
}
#包括
#包括
使用名称空间std;
int main()
{
向量v(10,17);
for(自动&it=v.begin();it!=v.end();+it){
for(auto&it2=it+1;it2!=v.end();+it2){
你是否真的不清楚你期望会发生什么。你能给出一个好的(完整的)例子吗?你确定这将使用auto&
而不是auto
进行编译吗?这可能就是原因。我不认为这应该是投反对票的原因。我的答案不是“是的,我确定”。我的答案是“在我的IDE中,它作为两者进行编译”.然后我编辑了我的代码。所以不仅否决票是不公平的,而且它也可以被删除,对吗?一块牛排就好了!说“plz”你可能会得到一块。哇,是的,真的很简单,很有表现力
template <typename T, typename A>
vector_view<T, A> make_vector_view(std::vector<T, A>& v,
size_t begin_,
size_t length_)
{
return {v, begin_, length_};
}
for (auto& it : v)
{
size_t begin = std::distance(&v[0], &it) + 1;
size_t length = v.size() - begin;
cout << it << ": ";
for (auto& jt : make_vector_view(v, begin, length))
{
cout << jt << " ";
}
cout << endl;
}
auto it:v
auto it = v.begin(); it != v.end(); it++
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> v(10, 17);
for (auto& it = v.begin(); it != v.end(); ++it) {
for (auto& it2 = it + 1; it2 != v.end(); ++it2) {
cout << *it2 << " ";
}
cout << endl;
}
// system("pause");
return 0;
}