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;
}