如何创建一个向量并以相反的顺序输出

How to create a vector and output in reverse order

所以我想创建一个包含 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;

    }
}

假设您有一个名为 numbersvector<int>,代码应如下所示:

for (vector<int>::size_type i = numbers.size() - 1; i >= 0; --i)
{
    std::cout << numbers[i] << std::endl;
}

除了它不是因为整数下溢(vector::size_type是无符号的,所以它永远不会小于0;循环永远持续下去)。所以像其他答案建议的那样使用迭代器:

for (auto iterator = numbers.rbegin(); iterator != numbers.rend(); ++iterator)
{
    std::cout  << *iterator << std::endl;
}

请注意,Whosebug 在此解决方案中突出显示了 iterator 一词,就好像它是语言或其他内容中内置的一样。如果您的代码中有这一行,那将是正确的(并且此解决方案将被破坏):

using namespace std;

这是不这样做的另一个原因:它污染了默认命名空间,您永远无法确定您是否使用了保留字。

您可以使用 reverse iterator:

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

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

试试这个:

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