首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用for循环迭代2个向量的C++

使用for循环迭代2个向量的C++
EN

Stack Overflow用户
提问于 2019-07-15 23:31:25
回答 4查看 4K关注 0票数 1

我试图在使用for循环的情况下迭代超过2个std::vectors,但得到了错误。迭代超过一个向量时,当我在for循环中放置另一个迭代器时,不知道出了什么问题。

代码语言:javascript
复制
#include<iostream>
#include<vector>

int main()
{
    std::vector<double> x={1,2,3,4,5}, d={10,11,12,13,14},x1,x2;

    /*for (std::vector<double>::iterator it1 = x.begin(),std::vector<double>::iterator it2 = d.begin();
    it1!=x.end(),it2!=d.end(); ++it1,++it2  )
    {
        x1.push_back(*it1 + (*it2));
        x2.push_back(*it1 + (*it2));
    }*/

    for (std::vector<double>::iterator it1 = x.begin();it1!=x.end(); ++it1  )
    {
        x1.push_back(*it1 );

    }

    return 0;
}

注释掉的代码有多个错误:qualified-id in declaration before ‘it2’ for (std::vector<double>::iterator it1 = x.begin(),std::vector<double>::iterator it2 = d.begin());,有人能解释这里有什么问题吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2019-07-15 23:38:52

for循环的第一部分是一个正常的声明,就像上面在一行中声明和定义多个向量一样。只写一次类型:

代码语言:javascript
复制
for (std::vector<double>::iterator it1 = x.begin(), it2 = d.begin();
     it1!=x.end() && it2!=d.end(); 
     ++it1, ++it2)
{
    x1.push_back(*it1 + (*it2));
    x2.push_back(*it1 + (*it2));
}

循环条件中还有一个错误:使用&&而不是,,否则这是一个逗号操作符,其结果只是最后一部分。

最后,现在习惯上使用auto而不是写出那些长类型:

代码语言:javascript
复制
for (auto it1 = x.begin(), it2 = d.begin();
     it1 != x.end() && it2 != d.end(); 
     ++it1, ++it2)
{
    x1.push_back(*it1 + (*it2));
    x2.push_back(*it1 + (*it2));
}
票数 2
EN

Stack Overflow用户

发布于 2019-07-15 23:36:47

当使用逗号(,)声明多个变量时,只需要指定一次类型。改变这一点:

代码语言:javascript
复制
for (std::vector<double>::iterator it1 = x.begin(), std::vector<double>::iterator it2 = d.begin();

对此:

代码语言:javascript
复制
for (std::vector<double>::iterator it1 = x.begin(), it2 = d.begin();

或者更好--既然您使用的是c++11,请使用auto

代码语言:javascript
复制
for (auto it1 = x.begin(), it2 = d.begin();

这样可以消除编译器错误,但在这里仍然有一个逻辑错误:

代码语言:javascript
复制
it1!=x.end(),it2!=d.end(); ++it1,++it2  )

您正在丢弃it1!=x.end()。在表达式中,逗号运算符计算每个表达式,但只计算最后一个表达式。将,更改为&&,如下所示:

代码语言:javascript
复制
it1!=x.end() && it2!=d.end(); ++it1,++it2  )

你可以走了。

票数 2
EN

Stack Overflow用户

发布于 2019-07-15 23:37:52

  1. 在for-循环中的定义中有一个错误。在定义变量时,不能使用逗号运算符提供多个类型。也就是说,这是错误的: 向量::iterator it1 = x.begin(),std::vector::iterator it2 = d.begin(); 要纠正这一点,请注意迭代器是相同的类型,因此您只需编写: 向量::迭代器it1 = x.begin(),it2 = d.begin();
  2. 测试条件不正确。在这里,逗号操作符执行第一个测试,然后忽略结果。也就是说,这在逻辑上是不正确的: it1 != x.end(),it2 != d.end(); 相反,您应该使用逻辑和运算符来确保循环在任一条件为false时立即终止: it1 != x.end() && it2!=d.end();
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57048288

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档