从字符数组中提取一定范围的元素到字符串中

13
我想从字符数组的开头提取一定范围的元素,并将它们放入一个字符串中。这个范围可能小于或等于元素数量。 这是我想出来的办法。
// buffer is a std::array<char, 128>

std::string message;

for (int i = 0; i < numberToExtract; ++i)
{
    message += buffer.at(i);
}

有更好的方法吗?

我一直在看类似于std::string的迭代器构造函数。例如std::string(buffer.begin(), buffer.end()),但我不想要所有的元素。

谢谢。


在使用STL时,经常需要质疑初始化对象的for循环。 - Wolf
1
@Wolf 这不是STL - Barry
@Barry 我看到了C++标准库。我重新表述一下,要注意使用for循环初始化C++标准容器。 - Wolf
@Wolf 你是什么意思? - ksl
我的意思是这个模式:{1}容器声明(默认构造){2}循环包含{3}将项目附加到容器中。在这里,std::string是容器:您希望它包含提取的字符;以这种方式完成后,您失去了使其成为const的选项,因为您必须声明它为变量。我经常寻找此类不良副作用的替代方案。 - Wolf
3个回答

25

你不必一直走到end

std::string(buffer.begin(), buffer.begin() + numberToExtract)

或者:
std::string(&buffer[0], &buffer[numberToExtract]);

或者使用接受指针和长度参数的构造函数:

std::string(&buffer[0], numberToExtract);
std::string(buffer.data(), numberToExtract);

构造函数带有ptr+len似乎最小,+1,也许应该首先考虑这个变体。 - Wolf
谢谢。我不知道为什么我没想到那个。 - ksl

2
你的第二个例子已经很接近了,你可以这样做:
std::string(buffer.begin(), buffer.begin() + numberToExtract)

这里使用指针算术运算,因为数组使用的是连续的内存。


1

随机访问迭代器可以进行算术运算:

std::string(buffer.begin(), buffer.begin() + numberToExtract);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接