[英]C++ program using standard library containers
标准图书馆的容器是新手,我的老师在今天的讲座结尾问了一个类似的问题,供我们学习
编写一个C ++程序,该程序从标准输入读取int直到文件结尾,然后以相反的顺序打印它们-每行一个。 使用标准库容器存储数据。 不使用新运算符。
如果必须使用标准库容器,该怎么办?
int main()
int i = 0;
{int array[];
vector<int> integers (array, array+ array.size)
for (i=0; i<array.size, i++)
cin>>a[i];
vector<int>::const_reverse_iterator reverse iterator;
^^到目前为止,这是我的伪代码,仍然可以到达。 任何反馈?
我不能代表他人,但是我认为粗心地使用首字母缩写“ STL”是不诚实的。 如果要引用“ C ++标准库”,请这样说。 缩写可以表示很多不同的东西,包括标准库,原始的STL实现(已有十多年的历史了)或其任何端口。 有关更多阅读,请参阅STL与“ C ++标准库”的抗争是什么?
在学习C ++方面,许多学生似乎忽略了他们拥有的最重要(也是非常昂贵)的资源之一,即学校。 如果您有问题,请务必先咨询您的老师。 问老师的助手。 问其他学生。 寻找一名校园教师。 打图书馆。 如果您的图书馆没有想要的书,请要求将其交付给您的校园。 但是,我会给您带来疑问的好处,并假设您已经做到了。
如果需要参考 ,请尝试cppreference 。 对于初学者来说,解析它不是很容易,尽管它大大简化了标准中的语言。 如果需要教程 ,请尝试Bjarne Stroustrup数百万本图书中的任何一本(夸张)。 C ++编程语言(第4版)是一个不错的选择。 ISO C ++网站还列出了流行的编译器,在线编译器,以及一小部分按C ++个性(Herb Sutter,Scott Meyers等)撰写的书籍。还有Marshall Cline的C ++常见问题解答 (各种作者)。
人们似乎也忘记了StackOverflow是一种资源。 人们花了数百个小时为c ++-faq做贡献,甚至只是通过投票对C ++问题进行排序也可以提供大量高质量的内容。 如果这还不够,请按信誉对用户页面进行排序,并寻找C ++专家,然后阅读他们的问题和解答。 完成所有这些操作后,您不能说您找不到问题的答案。
到目前为止,我所写的内容都无法解决这个问题,因此让我们解决您的问题。
您当前的代码显示:
int main()
int i = 0;
{
int array[];
vector<int> integers (array, array+ array.size)
for (i=0; i<array.size, i++)
cin>>a[i];
vector<int>::const_reverse_iterator reverse iterator;
第一个问题是您的K&R样式声明。 int i = 0
需要在 main 内部 。 然后,您将获得一个未知范围的数组。 在这种情况下,这是不允许的。 只是从std::vector
,这里不需要数组。 最后,您不需要reverse_iterator
,稍后我将向您展示原因。
#include <iostream>
#include <vector>
int main() {
std::vector<int> v;
int current_num;
while (std::cin >> current_num)
v.push_back(current_num);
}
这个习惯用法std::cin >> current_num
很有用,因为它简洁明了,循环将正常退出(即错误的用户输入或EOF)。 请参阅为什么循环条件内的iostream :: eof被认为是错误的? 详细说明。
现在,您要以相反的顺序打印整数。 您可以通过三种方式执行此操作:
std::sort(v.rbegin(), v.rend());
std::reverse(v.begin(), v.end()); // #include <algorithm>
然后遍历并打印每个元素。 或者在打印每个元素时使用向后迭代向量的循环。 上面的两个方法实际上是等效的,但是我包含了rbegin()
因为它返回了一个反向迭代器,表明您不必处理裸迭代器。
我不会麻烦提供更长的解释,因为它是凌晨3:30,但希望可以帮助您入门。 祝好运。
如果您开始,最好是std :: vector。
vector<int> v;
int temp = 0;
while(cin>>temp)
{
v.push_back(temp);
}
for(int i=0; i<v.size(); i++)
cout<<v[v.size()-1-i] <<endl;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.