如何以相反的顺序创建向量和输出

时间:2015-06-26 02:03:02

标签: c++ for-loop vector reverse

所以我想创建一个包含100个元素的向量,然后将第一个元素分配给1,将第二个元素分配给2,依此类推。然后以相反的顺序输出这个向量,所以100,99,98等等。 这就是我所拥有的,它一直输出0,任何帮助将不胜感激。

int main()
{
    vector<int>numbers(100);
    int i = 0;
    for (i; i < 100; ++i)
    {
        int j = i + 1;
        numbers.push_back(j);
        cout << numbers[i] << endl;

    }
}

4 个答案:

答案 0 :(得分:3)

您可以使用reverse iterator

vector<int> numbers(100);
for( auto it= numbers.rbegin(); it != numbers.rend(); ++it)
{
   std::cout<< *it<<" ";
} 

答案 1 :(得分:2)

std::vector<int> myVector;
for (int i = 0; i < 100; ++i)
{
    myVector.push_back(i);
}

std::vector<int>::reverse_iterator riter = myVector.rbegin();
while (riter != myVector.rend())
{
    std::cout << *riter << std::endl;
    ++riter;
}

你可以在这里使用反向迭代器。

答案 2 :(得分:0)

假设您有一个名为vector<int>的{​​{1}},代码应如下所示:

numbers

之外,由于整数下溢(for (vector<int>::size_type i = numbers.size() - 1; i >= 0; --i) { std::cout << numbers[i] << std::endl; } 是无符号的,因此它永远不会小于0;循环继续永远)。所以使用像其他答案建议的迭代器:

vector::size_type

请注意,StackOverflow在此解决方案中突出显示单词for (auto iterator = numbers.rbegin(); iterator != numbers.rend(); ++iterator) { std::cout << *iterator << std::endl; } ,就好像它内置于语言或其他内容中一样。如果您的代码中包含以下行,那么它将是正确的(并且此解决方案将被破坏):

iterator

这是不执行此类操作的另一个原因:它污染了默认命名空间,您无法确定是否使用了保留字。

答案 3 :(得分:0)

试试这个:

int main() 
{ 
      vector<int>numbers; 
      int i = 0; 
      for (int i=1; i <= 100; ++i) 
      {  
             numbers.push_back(i);  
      } 
      for(int i=100;i>0;--i)
      {
               cout << numbers[i-1] << endl;
       }
 }