我有正確的答案,但只是順序錯誤,我不知道如何扭轉它。我之前不能添加任何東西for (int i = 1; i < inputVector.size(); i ) {
#include <iostream>
#include <vector>
using namespace std;
int main() {
int i;
vector<int> inputVector;
int value;
cin >> value;
while (value != -1) {
inputVector.push_back(value);
cin >> value;
}
for (int i = 1; i < inputVector.size(); i ) {
if (inputVector[i] > 0) {
cout << inputVector[i] << " " << endl;
}
}
return 0;
}
uj5u.com熱心網友回復:
而不是這個:
for (int i = 1; i < inputVector.size(); i ) {
if (inputVector[i] > 0) {
cout << inputVector[i] << " " << endl;
}
}
因為您的索引i從 開始1,所以您實際上是在跳過第一個元素inputVector[0]。我不確定為什么。但是要反向列印串列,您可以通過i從最后一個元素的索引(大小 - 1)中減去來調整索引值。
for (size_t i = 0; i < inputVector.size(); i ) {
size_t j = inputVector.size() - 1 - i;
if (inputVector[j] > 0) {
cout << inputVector[j] << " " << endl;
}
}
Vector 也有一個反向迭代器。所以你也可以這樣做:
for (auto itor = inputVector.rbegin(); itor != inputVector.rend(); itor ) {
int value = *itor;
if (value > 0) {
cout << value << " " << endl;
}
}
uj5u.com熱心網友回復:
考慮到您的限制,這應該足夠了。
for (int i = inputVector.size() - 1; i > 0 ; i )
if (inputVector[i] > 0)
cout << inputVector[i] << " " << endl;
uj5u.com熱心網友回復:
使用便利函式的另一個好方法<algorithm>是std::for_each(對于 C 20 std::ranges::for_each)。在那里,您只需傳遞反向迭代器作為引數和一個簡短的 lambda 函式來選擇(并在您的情況下輸出)正值。這歸結為:
std::for_each (rbegin(inputVector), rend(inputVector),
[](const int i) {
if (i > 0) { std::cout << i << '\n'; }
});
在您的情況下,一個簡短的示例是:
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> inputVector { -3, -2, -1, 0, 1, 2, 3 };
std::for_each (rbegin(inputVector), rend(inputVector),
[](const int i) {
if (i > 0) { std::cout << i << '\n'; }
});
}
示例使用/輸出
$ ./bin/find_if_positive
3
2
1
無論您是通過回圈手動完成,還是使用 C 提供的功能之一,您都將做同樣的事情。值得知道如何做到這一點。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/511337.html
標籤:C
上一篇:C 如何洗掉最后一個逗號?
