我写了这个程序,在从最大到最小矢量排序号,它的伟大工程,但被窃听我的唯一事情就是试图从最后一个数字删除逗号。 我的继承人代码
#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;
}
这里是输出
9, 9, 9, 8, 8, 8, 6, 6, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 0, 0,
Bye...
你可以在最后的0后看到有一个逗号这没有意义语法讲话。 我怎样才能删除逗号?
而不是删除最简单的方法是刚刚打印逗号仅比第一其它值:
for (auto i = vi3.begin(); i != vi3.end(); ++i) {
if(i != vi3.begin()) {
cout << ", ";
}
cout << *i;
}
我经常用这个成语来格式化如SQL参数列表,或在一个分隔符不是最后一个元素之后,但对于其他任何想要的相似。
还有其他的方法来检测所述第一元件 (例如,使用bool
初始化为可变true
在循环开始之前,并设置为false
时,第一迭代)。
为了您的例子似乎只是检查vi3.begin()
是最简单,最自然的方式。
下面是伪代码的通用变种:
bool isFirstOutput = true;
for_each(element in list) {
if(not isFirstOutput) {
print delimiter;
}
print element;
isFirstOutput = false;
}
如果begin
, end
至少双向迭代器(和你的),你可以检查最初是begin
!= end
; 如果不打印什么; 如果是这样打印", "
-puncuated元素递增begin != std::prev(end)
,最后打印*begin()
。 像这样:
main.cpp中
#include <utility>
template<typename OStream, typename BiIter, typename Punct>
void punctuated(OStream && out, Punct && punct, BiIter begin, BiIter end)
{
if (begin != end) {
for (--end ;begin != end; ++begin) {
std::forward<OStream>(out) << *begin << std::forward<Punct>(punct);
}
std::forward<OStream>(out) << *begin;
}
}
#include <iostream>
#include <vector>
#include <list>
#include <set>
int main()
{
std::vector<int> v0;
std::vector<int> v1{{1}};
std::list<int> l{{1,2}};
std::set<int>s{{3,4,5,6,7}};
std::cout << "v0 [";
punctuated(std::cout,",",v0.begin(),v0.end());
std::cout << "]\n";
std::cout << "v1 [";
punctuated(std::cout,",",v1.begin(),v1.end());
std::cout << "]\n";
std::cout << "l [";
punctuated(std::cout,",",l.begin(),l.end());
std::cout << "]\n";
std::cout << "s [";
punctuated(std::cout,"|",s.begin(),s.end());
std::cout << "]\n";
return 0;
}
输出:
g++ -Wall -Wextra main.cpp && ./a.out
v0 []
v1 [1]
l [1,2]
s [3|4|5|6|7]
生活