std::vector可以像数组一样使用吗?

9

std::vector<char>可以像数组一样使用吗?

std::vector<char> v(10);
strncpy(&v[0], "hello", 9); // <-- Is this safe?

是的,我本意是输入 std::vector<char>。让我尝试编辑我的原始帖子。 - user1061590
2
@TokenMacGuy:strncpy的工作方式不是这样的... - Kerrek SB
我知道这个问题非常简单明了,但是你不应该仅仅依靠标题来提出问题,而应该添加一个真正的问题主体,好让它真正成为一个问题。 - Christian Rau
1个回答

15

没问题。从C++03开始,vector 必须具有连续的存储空间。

从C++11开始,std::string 也是如此;你可以使用 v.data() 来代替 &v[0](当 v 为空时也有效)。


你提到的“截至C++03..”让我对C++11中的情况产生了疑问,所以只是为了确认一下,据我所知,在C++11中std::Vector仍然需要具有连续的存储空间,这是正确的吗? - Alok Save
@Als 是的,在C++11中这个没有改变。 - bames53
是的。新标准不会改变vector的存储要求。在英语中,“as of”大致意思与“since”相同,但暗示事件发生的时间更近。 :) - Jonathan Grynspan
虽然这个问题涉及到vector<char>,但值得注意的是vector<bool>不满足你可以做bool foo=&v[0]的属性。这是因为它实际上是一个实现了一种位压缩存储模式的不同类,并且它的operator[]返回一个代理句柄。正如维基百科所述,“这被广泛认为是一个错误”,但由于它在标准中,我们必须意识到它!http://en.wikipedia.org/wiki/Vector_(C%2B%2B)#vector.3Cbool.3E_specialization - aselle
1
“截至”并不意味着“自从”。它的意思是“至少到……为止”。 “截至今天早上,A是真实的”意味着A在今天早上是真实的,但现在可能不再是真实的。@AlokSave的问题是合理的。 - jwg

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