关于迭代器的问题,这段问题出在哪,运行输入两个数就崩了。开始出现很多0000.求解答。

#include
#include

using namespace std;

int main()
{
int val = 0,a = 0;
vector vInt;
cout << "请输入一组整数:";
while(cin >> val)
{
vInt.push_back(val);
}

if(vInt.cbegin() == vInt.cend())
    {
        cout << "没有任何元素!" << endl;
        return -1;
    }

for(auto it = vInt.cbegin(); it != vInt.cend() - 1; ++it)
{
    a = *it + *(++it);
    cout << a << " ";
    if((it - vInt.cbegin() + 1) % 10 == 0)
        cout << endl;
}

if(vInt.size() % 2 != 0)
{
    a = *(vInt.cend() - 1);
    cout << a;
}

return 0;

}

4个回答

用的是code::blocker这个软件。

cend()后面为什么要去-1呢? 这个是迭代器,如果通过下表访问才是for(auto i = 0; i < vInt.size() -1; i++);

for(auto it = vInt.cbegin(); it != vInt.cend(); ++it)
{
a = *it + *(++it);
cout << a << " ";
if((it - vInt.cbegin() + 1) % 10 == 0)
cout << endl;
}

if(vInt.size() % 2 != 0)
{
a = *(vInt.cend());
cout << a;
}

baidu_26578229
26578229 cend()是容器vector的最后一个元素的下一个,只是一个标记作用,代表已经处理完了里面的所有元素,又称“尾后迭代器”。c++ prime第五版是这样说的,所以当然要减1取得最后一个元素
大约一年之前 回复

上面的少了#include 和 #include ,没复制完全。这个代码我找的网上的c++ prime第五版的答案。用迭代器输出关于整数的相邻的和的答案。
在code::blocks上运行有问题。

baidu_26578229
26578229 邪门了。为什么又消失了。。。。。
大约一年之前 回复

我找到原因了。是 a = * it + (++it ); 这句代码的问题,因为这句自增可能会导致越界。改成(it + 1)就没问题了。*(++it) 很有可能造成访问越界。

baidu_26578229
26578229 我好傻啊。在for的下面自增会直接改变it的值,for里面加了1,然后下面又再加了1.实际上it + 2应该就被跳过了。网上的c++ prime 答案不靠谱啊。。。
大约一年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!