【发布时间】:2020-12-23 16:15:22
【问题描述】:
我学习 C++ 是为了好玩。我试图理解迭代器算术并编写了一个简单的程序,它将向量中的第一个元素与最后一个元素相加。接下来将第二个和倒数第二个元素相加。该过程一直持续到所有元素都以这种方式求和为止。
问题似乎与我的代码的*(a.end() - 1 - it) 部分有关。如果我删除- it,那么我会得到我期望的结果。添加- it 会导致错误提示
存在构建错误。是否要继续运行上次成功的构建?
我从 Visual Studio 收到的错误如下;
E0075
*的操作数必须是指针C2100 非法间接
我已经以不同的方式解决了这个问题,并且能够实现我的目标。我的问题是为什么这段代码是错误的,可以稍微修改一下以正确执行吗?
感谢任何建议。
#include <iostream>
#include <vector>
using std::cin;
using std::cout;
using std::endl;
using std::vector;
int main()
{
vector<int> a{1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
for (auto it = a.begin(); it != a.begin() + (a.end() - a.begin()) / 2; ++it)
cout << (*it) + *(a.end() - 1 - it) << endl;
return 0;
} // END MAIN
【问题讨论】:
-
iterator - iterator给出距离,而不是迭代器。 -
如果您遇到编译器错误,为什么您没有在这个问题中包含确切的错误?
-
感谢您添加错误,它好多了。请注意,不幸的是,每个人都不容易阅读图像。您能否将错误消息的文本添加到问题中?只需“indirection requires ...”这一行就可以了。 另外拥有图像也很好。
-
感谢您添加文字,这个问题现在很好。我已经稍微编辑了它以改进格式。当然还有其他方法可以做到这一点,但这可以给你一些想法。