如何制作一个C ++列表

时间:2015-04-25 15:51:46

标签: c++

所以我必须制作一个程序来逐个存储输入,直到输入-1。此输入的示例将是1 1 1 0 3 5 3 -1。并且不会记录-1。然后它会向你播放列表,但是bacwards,所以输出将是3 5 3 0 1 1 1

要做到这一点,我需要制作一个对象列表,但我不知道如何声明它们,或者如何向它们添加/删除项目。我该怎么做?

6 个答案:

答案 0 :(得分:2)

您需要一个存储值的地方,这些值可以在读取值时增长。

更简单的可能是std::vector,还有std::liststd::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);

http://www.cplusplus.com/reference/vector/vector/push_back/

答案 2 :(得分:0)

如果您需要使用列表,则可以使用std::list。 您可以这样声明它们:

std::list<int> myList;

您可以详细了解std::list here

答案 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)

基本上有两种选择:

  1. 您可以使用指针int *data并使用new[]手动为其分配内存。当你发现数组大于你的预期时,你需要不断重新分配数组。

  2. 您可以使用c ++提供的精彩容器之一。我可能会建议std::vector

  3. 以下是您如何实现此目标的示例:

    #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";
    }