c++ - 努力遍历列表
问题描述
...
// ConsoleApplication2.cpp : This file contains the 'main' function. Program execution begins and ends there.
//
#include <iostream>
#include <vector>
#include <list>
void squareVector(std::vector<int>&array1)
{
std::list<int> listint;
for (int j = 0; j < array1.size();++j)
{
listint.push_back(array1[j]);
}
std::list<int>::iterator it;
it = listint.begin();
int val;
for (std::list<int>::iterator i = listint.begin(); i != listint.end(); ++i)
{
val = *i * *i;
listint.insert(it, val);
++it;
}
for (std::list<int>::iterator i = listint.begin(); i != listint.end(); ++i)
{
std::cout << *i << ", ";
}
}
int main()
{
std::vector<int>intlist ({ 1,3,2,5 });
squareVector(intlist);
}
...
我的目标是将数字 1、3、2 和 5 放入列表中,然后将每个数字平方并放入列表中,我设法将它们平方并放入列表中,但由于某种原因进入回到前面。即输出应该是1,1,3,9,2,4,5,25,但我得到的是1,1,9,3,4,2,25,5。
我尝试向迭代器添加另一个增量,但在运行时出现错误“无法增加结束列表迭代器”。
编辑,感谢大家的评论,非常感谢,显然我还有很多东西要学。
解决方案
您无需再次在列表中插入元素。只需将变量作为参考并对其进行修改即可。好吧,您的代码的问题在于插入功能。
Insert 函数在给定位置之前插入。就像你给第四个位置一样,它会在第四个位置之前插入。
从 cpp 参考 1 中阅读此摘录
。 pos - 将在其之前插入内容的迭代器。pos 可能是 end() 迭代器。
因此,当您执行时,您在迭代器的位置指向之前插入。因此 1,3,2,5 变为 1²,1,3²,3,2²,2,5²,5(在 1 之前,然后在 3 之前,依此类推)
如果你把所有东西都留在编译器上不是更好吗?为此,请使用基于范围的循环。见下文。
void squareVector(std::vector<int>&array1)
{
std::list<int> listint;
for (int j = 0; j < array1.size();++j)
{
listint.push_back(array1[j]);
}
std::list<int>::iterator it;
it = listint.begin();
int val;
for(auto &i : listint) // declare i as reference not as plain i.
i = i*i;
for (std::list<int>::iterator i = listint.begin(); i != listint.end(); ++i)
{
std::cout << *i << ", ";
}
}
推荐阅读
- apache - “豪华”主机上的 .htaccess 问题
- java - 为什么在方法参数上同步是“危险的”
- python - 从 Python3.7 中的嵌套 while 循环中继续 main while 循环
- elasticsearch - Elasticsearch,按字段分组并计算另一个字段的平均值
- flutter - 无法下载 Flutter 下载按钮失败
- python - Python - 寻找交叉点
- python - 如何使用 BeautifulSoup 从 URL 列表中提取相同的嵌套数据
- java - Activity 选择问题中缺少测试用例
- python - 意外识别
- html - navbar-expand-md 类导航栏的响应性问题