raj*_*kod 4 c++ iostream vector
我写了这个程序,它从最大到最小对向量中的数字进行排序,虽然效果很好,但困扰我的唯一一件事就是试图从最后一个数字中删除逗号。这是我的代码
#include <iostream>
#include <vector>
#include <cstdlib>
#include <algorithm>
using namespace std;
int main() {
vector<int> vi1, vi2, vi3;
srand(987);
for (int i = 0; i < 10; ++i) vi1.push_back(rand() % 10);
sort(vi1.begin(), vi1.end());
for (int i = 0; i < 10; ++i) vi2.push_back(rand() % 10);
sort(vi2.begin(), vi2.end())
while(!vi1.empty() && !vi2.empty()) {
if(vi1.back()>=vi2.back()) {
vi3.push_back(vi1.back());
vi1.pop_back();
}
else {
vi3.push_back(vi2.back());
vi2.pop_back();
}
}
while(!vi1.empty()) {
vi3.push_back(vi1.back());
vi1.pop_back();
}
while(!vi2.empty()) {
vi3.push_back(vi2.back());
vi2.pop_back();
}
for (auto i = vi3.begin(); i != vi3.end(); ++i)
cout << *i << ", ";
cout << "\nBye..." << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这是输出
9, 9, 9, 8, 8, 8, 6, 6, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 0, 0,
Bye...
Run Code Online (Sandbox Code Playgroud)
如您所见,最后一个0后有一个逗号,语法上没有意义。如何删除该逗号?
除了删除最简单的方法外,仅打印除第一个值以外的其他值的逗号是:
for (auto i = vi3.begin(); i != vi3.end(); ++i) {
if(i != vi3.begin()) {
cout << ", ";
}
cout << *i;
}
Run Code Online (Sandbox Code Playgroud)
我经常使用这个习惯用法来格式化例如SQL参数列表,或类似的格式,在最后一个元素之后不希望使用分隔符,但对于其他元素则不需要。
还有其他方法可以检测第一个元素(例如,使用在循环开始之前bool初始化为true,并false在第一次迭代时设置为的变量)。
对于您的示例,似乎只检查vi3.begin()是最简单,最自然的方法。
这是伪代码中的通用变体:
bool isFirstOutput = true;
for_each(element in list) {
if(not isFirstOutput) {
print delimiter;
}
print element;
isFirstOutput = false;
}
Run Code Online (Sandbox Code Playgroud)