【问题标题】:Can std::vector be treated like an arraystd::vector 可以像数组一样对待吗
【发布时间】:2011-12-05 02:53:55
【问题描述】:

std::vector<char> 是否可以这样被视为一个数组:

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

【问题讨论】:

  • 是的,我的意思是输入 std::vector。让我尝试编辑我的原始帖子。
  • @TokenMacGuy:strncpy 不是这样工作的......
  • 我知道这个问题很简单直接,但你不应该只指望标题来组成问题并添加一个真正的问题主体,好吧,问一个问题。

标签: c++ stl vector


【解决方案1】:

是的,没关系。从 C++03 开始​​,vector 需要具有连续存储。

顺便说一句,从 C++11 开始,std::string 也是如此;你可以说v.data() 作为&amp;v[0] 的同义词(当v 为空时也有效)。

【讨论】:

  • 您提到 截至 C++03.. 让我怀疑它在 C++11 中的表现,所以只是为了确认 AFAIK,std::Vectoris即使在 C++11 中仍然需要连续存储,对吗?
  • @Als 是的,这在 C++11 中没有改变。
  • 是的。新标准不会改变vector 的存储要求。在英语中,“as of”与“since”的意思大致相同,但意味着事件的更近时间范围。 :)
  • 虽然这个问题涉及向量。这里可能值得注意的是 vector 不满足你可以做的属性 bool foo=&v[0];这是因为它实际上是一个不同的类,它实现了一点压缩的存储模式,并且它的 operator[] 返回一个代理句柄。正如维基百科所说,“这被广泛认为是一个错误”,但由于它在标准中,我们必须注意它! en.wikipedia.org/wiki/…
  • 'As of' 与'since' 不同。它的意思是“至少直到”。 “截至今天早上 A 是真的”意味着 A 今天早上是真的,但可能不再是真的。 @AlokSave 的问题是有道理的。
猜你喜欢
  • 2013-11-12
  • 1970-01-01
  • 2013-09-20
  • 1970-01-01
  • 1970-01-01
  • 2010-09-18
  • 1970-01-01
  • 2021-05-05
  • 1970-01-01
相关资源
最近更新 更多