C++ 第二部分:编写两个函数来反转向量中元素的顺序<;int>;
首先,我知道有人问了以下问题。但是,他们没有问第二部分。第二部分我需要帮助 编写两个函数,反转向量中元素的顺序。例如,1,3,5,7,9变为9,7,5,3,1。第二个反转函数应使用任何其他向量反转其向量w/o的元素。(提示:交换) 但是当我测试代码时。它不会使用以下循环反转顺序:C++ 第二部分:编写两个函数来反转向量中元素的顺序<;int>;,c++,function,vector,C++,Function,Vector,首先,我知道有人问了以下问题。但是,他们没有问第二部分。第二部分我需要帮助 编写两个函数,反转向量中元素的顺序。例如,1,3,5,7,9变为9,7,5,3,1。第二个反转函数应使用任何其他向量反转其向量w/o的元素。(提示:交换) 但是当我测试代码时。它不会使用以下循环反转顺序: for (int i = 0; i < testing.size(); i++) swap(testing[i], testing[testing.size() - 1 - i]); for(int
for (int i = 0; i < testing.size(); i++)
swap(testing[i], testing[testing.size() - 1 - i]);
for(int i=0;i
但是当我将testing.size()除以2时。它工作得很好。所以我的问题是:当它被二除时,为什么它会起作用。我找了很多时间,甚至试着画出来
for (int i = 0; i < testing.size()/2; i++)
swap(testing[i], testing[testing.size() - 1 - i]);
for(int i=0;i
提前谢谢
以下是完整的编码:
void replacing(vector<int>& testing)
{
for (int i = 0; i < testing.size(); i++)
cout << "original " << testing[i] << "\n";
for (int i = 0; i < testing.size(); i++)
swap(testing[i], testing[testing.size() - 1 - i]);
for (int i = 0; i < testing.size(); i++)
cout << "reversed " << testing[i] << "\n";
}
int main()
{
vector<int> original;
int numbers;
cout << "Enter random numbers: \n";
while (cin >> numbers)
original.push_back(numbers);
replacing(original);
}
void替换(向量和测试)
{
对于(int i=0;i cout这是因为如果你有(i要反转向量,你需要交换它的两半。如果你交换两半,你将再次得到原始向量
所以这个循环
for (int i = 0; i < testing.size(); i++)
{
swap(testing[i], testing[testing.size() - 1 - i]);
}
在这种情况下,将索引小于testing.size()/2
(下半部分)的每个元素与索引大于或等于testing.size()/2
(上半部分)的每个元素交换
您可以用一条语句编写函数
testing.assign( testing.rbegin(), testing.rend() );
还有一个在header
中声明的标准算法也执行相同的操作
#include <algorithm>
//...
std::reverse( testing.begin(), testing.end() );
#包括
//...
std::reverse(testing.begin(),testing.end());
仅出于说明的目的,以下是程序运行示例中发生的情况。i
向右移动,而size()-1-i
(称之为j
)向左移动:
1 2 3 4 5 6
i j
6 2 3 4 5 1
i j
6 5 3 4 2 1
i j
6 5 4 3 2 1
j i
您的循环应该在这里停止,因为i
已超过size()/2
。现在观看:
6 5 3 4 2 1
j i
6 2 3 4 5 1
j i
1 2 3 4 5 6
j i
当i
达到size()
时,它实际上停止在这里,此时您交换的所有元素都已交换回其原始位置!std::reverse(numbers.begin(),numbers.end());
.cppreference还具有“可能的实现”这对将来的项目很有用。谢谢。谢谢!我能按时完成作业。我们还没有学习reverse()然而,老师似乎只想让我们使用我们已经复习过的代码。但从现在起我会记住这一点。谢谢!我更喜欢视觉学习。所以有了你的视觉帮助和Vlad的答案,我就能够理解了。
6 5 3 4 2 1
j i
6 2 3 4 5 1
j i
1 2 3 4 5 6
j i