gpt4 book ai didi

c++ - std::ostream_iterator 防止最后一项使用定界符

转载 作者:可可西里 更新时间:2023-11-01 16:35:41 26 4
gpt4 key购买 nike

<分区>

有没有一种方法可以使用 std::ostream_iterator(或类似的),以便不为最后一个元素放置定界符?

#include <iterator>
#include <vector>
#include <algorithm>
#include <string>


using namespace std;
int main(int argc, char *argv[]) {
std::vector<int> ints = {10,20,30,40,50,60,70,80,90};
std::copy(ints.begin(),ints.end(),std::ostream_iterator<int>(std::cout, ","));
}

将打印

10,20,30,40,50,60,70,80,90,

我试图避免尾随定界符。我要打印

10,20,30,40,50,60,70,80,90

当然,你可以使用循环:

for(auto it = ints.begin(); it != ints.end(); it++){
std::cout << *it;
if((it + 1) != ints.end()){
std::cout << ",";
}
}

但是给定 C++11 基于范围的循环,跟踪位置很麻烦。

int count = ints.size();
for(const auto& i : ints){
std::cout << i;
if(--count != 0){
std::cout << ",";
}
}

我愿意使用 Boost。我调查了boost::algorithm::join()但需要将整数复制到字符串中,所以它是两行代码。

std::vector<std::string> strs;
boost::copy(ints | boost::adaptors::transformed([](const int&i){return boost::lexical_cast<std::string>(i);}),std::back_inserter(strs));
std::cout << boost::algorithm::join(strs,",");

理想情况下,我只想使用 std::algorithm,而不是在范围内的最后一项上使用定界符。

谢谢!

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com