繁体   English   中英

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

[英]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 ++问题进行排序也可以提供大量高质量的内容。 如果这还不够,请按信誉对用户页面进行排序,并寻找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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM