使用标准库容器的C ++程序

时间:2014-11-25 06:59:42

标签: c++ c++-standard-library

标准库容器的新功能,我的老师在今天的演讲结束时问了这样一个问题,让我们学习它们

编写一个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;

^^这是我的伪代码到目前为止,仍然到达那里。有什么反馈吗?

2 个答案:

答案 0 :(得分:4)

我不能为别人说话,但我认为粗略使用首字母缩略词“STL”在理智上是不诚实的。如果你想参考“C ++标准库”,那就这么说吧。缩写可以表示许多不同的东西,包括标准库,原始STL实现(已超过十年)或其任何端口。如需更多阅读,请参阅What's this STL vs. “C++ Standard Library” fight all about?

在学习C ++方面,许多学生似乎忽略了他们拥有的最重要(也是非常昂贵)的资源之一,即他们的学校。如果您遇到问题,始终首先询问您的老师。问老师的助手。问其他学生。找一个校内导师。点击图书馆。如果您的图书馆没有您想要的图书,请要求将图书发送到您的校园。但是我会给你怀疑的好处,并假设你已经这样做了。

如果您想要参考,请尝试cppreference。对于初学者来说,解析并不是很容易,尽管它大大简化了标准语言。如果您想要教程,请尝试使用Bjarne Stroustrup百万本书中的任何一本(夸张)。 The C++ Programming Language (4th Edition)是个不错的选择。 ISO C++网站还列出了流行的编译器,在线编译器和C ++人物的一小部分书籍(Herb Sutter,Scott Meyers等)。还有Marshall Cline的C++-faq(各种作者)。

人们似乎也忘记了StackOverflow是一种资源。人们花费了数百小时为做出贡献,甚至只需按votes对C ++问题进行排序,就可以提供大量高质量的内容。 如果还不够,请按声誉对user页面进行排序,并查找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&amp; 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不良)。有关详细说明,请参阅Why is iostream::eof inside a loop condition considered wrong?

现在您想以相反的顺序打印整数。您有三种方法:

std::sort(v.rbegin(), v.rend());
std::reverse(v.begin(), v.end()); // #include <algorithm>

然后循环并打印每个元素。或者使用循环向后迭代向量,同时打印每个元素。上面的两种方法实际上是等价的,但我包含rbegin(),因为它返回一个反向迭代器,证明你不必处理裸迭代器。

我不打算提供更长的解释,因为早上3点30分,但希望这会让你开始。祝你好运。

答案 1 :(得分:0)

如果你要开始,最好是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;