所以我必须制作一个程序来逐个存储输入,直到输入-1。此输入的示例将是1 1 1 0 3 5 3 -1。并且不会记录-1。然后它会向你播放列表,但是bacwards,所以输出将是3 5 3 0 1 1 1
要做到这一点,我需要制作一个对象列表,但我不知道如何声明它们,或者如何向它们添加/删除项目。我该怎么做?
答案 0 :(得分:2)
您需要一个存储值的地方,这些值可以在读取值时增长。
更简单的可能是std::vector,还有std::list
或std::deque
以及任何双向容器都可以进行游戏。
然后你需要一个循环来获取值并将它们保存到容器中(push_back
方法具有该目的),另一个循环从容器中获取值并从末尾打印它们。
这可以使用迭代器或使用索引来完成,具体取决于容器和您自己的特定需求。
这可能是一种可能性:
#include <vector>
#include <iostream>
template<class V, class S>
void read_numbers(V& v, S& s, N end)
{
N x=0;
while(x << s)
{
if(x==end) return;
v.push_back(x);
}
std::cerr << "error: bad reading" << std::endl;
}
template<class V, class S>
void write_numbers(const V& v, S& s)
{
for(auto i=s.rbegin(); i!=s.rend(); ++i)
std::cout << *i << ' ';
std::cout << std::endl;
}
int main()
{
std::vector<int> nums;
read_numbers(nums, std::cin, -1); }
write_numbers(nums, std::cout);
return 0;
}
答案 1 :(得分:1)
对于未知大小的列表,您可以声明一个矢量类:
std::vector<int> myVector;
然后要添加元素,请使用push_back:
// assign some integer to myInt
myVector.push_back (myInt);
答案 2 :(得分:0)
答案 3 :(得分:0)
你可以用它来获取灵感。
#include <vector>
#include <iostream>
int main(int argc, char * argv[]) {
std::vector<int> numbers;
int number;
do {
std::cin >> number;
if (number != -1) {
numbers.push_back(number);
}
} while(number != -1);
for (std::vector<int>::reverse_iterator it = numbers.rbegin(); it != numbers.rend(); ++it) {
std::cout << *it << " ";
}
std::cin.get();
return 0;
}
答案 4 :(得分:0)
正如已经建议的那样,你可以使用std :: vector。它会在您推送更多元素时调整大小。如果要求严格地是链表,那么请转到std :: list。
关于以相反顺序播放它们的要求,只需使用reverse_iterator并通过列表打印它们。
std::list<int> mylist;
// Insert the elements.
for (std::list<int>::reverse_iterator rIt = mylist.rbegin();
rIt != mylist.rend(); ++rIt) {
cout << *rIt;
}
答案 5 :(得分:-1)
基本上有两种选择:
您可以使用指针int *data
并使用new[]
手动为其分配内存。当你发现数组大于你的预期时,你需要不断重新分配数组。
您可以使用c ++提供的精彩容器之一。我可能会建议std::vector
。
以下是您如何实现此目标的示例:
#include <iostream>
#include <vector>
int main() {
std::vector<int> data;
while (true) {
int number;
std::cin >> number;
if (!std::cin)
break;
if (number == -1)
break;
data.push_back(number);
}
for (int datum : data)
std::cout << datum << " ";
std::cout << "\n";
}