我无法从字符串创建 vector 。有人可以解释以下4种情况之间的区别吗?根据cplusplus.com,出于相同的奇怪原因,我希望Case 1
与Case 2
一样工作,但事实并非如此。
typedef std::vector<uint8_t> uint8vec_t;
std::string keySecret ()
{
return std::string ("SomeSecret");
}
情况1
// throws std::bad_alloc
uint8vec_t vSecret (keySecret ().begin (), keySecret ().end ());
情况二
// results in a vector with strange length
uint8vec_t vSecret (keySecret ().begin (), keySecret ().begin () + keySecret ().length ());
情况3
// throws std::bad_alloc
uint8vec_t vSecret (&keySecret ()[0], &keySecret ()[keySecret ().length ()]);
案例4
// throws std::bad_alloc
uint8vec_t vSecret (&keySecret ()[0], &keySecret ()[0] + keySecret ().length ());
最佳答案
它们都是不好的,在第二种情况下,您只是碰巧得到了看起来正确的行为。问题在于keySecret
每次都会返回不同的std::string
对象。您不能在一个上调用begin
而在另一个上调用end
并期望它们以任何方式相关。
您应该改为一次调用keySecret
,进行本地复制,然后在该单个本地对象上调用begin
和end
。