如何创建一个向量并以相反的顺序输出
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;
}
}
假设您有一个名为 numbers
的 vector<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;
}
}
所以我想创建一个包含 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;
}
}
假设您有一个名为 numbers
的 vector<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;
}
}