Ben*_*Ben 1 c++ string vector std
我在从字符串创建向量时遇到问题.有人可以解释下面4例之间的区别吗?根据cplusplus.com我的预期Case 1工作方式与Case 2出于同样奇怪的原因一样,但事实并非如此.
typedef std::vector<uint8_t> uint8vec_t;
std::string keySecret ()
{
return std::string ("SomeSecret");
}
Run Code Online (Sandbox Code Playgroud)
情况1
// throws std::bad_alloc
uint8vec_t vSecret (keySecret ().begin (), keySecret ().end ());
Run Code Online (Sandbox Code Playgroud)
案例2
// results in a vector with strange length
uint8vec_t vSecret (keySecret ().begin (), keySecret ().begin () + keySecret ().length ());
Run Code Online (Sandbox Code Playgroud)
案例3
// throws std::bad_alloc
uint8vec_t vSecret (&keySecret ()[0], &keySecret ()[keySecret ().length ()]);
Run Code Online (Sandbox Code Playgroud)
案例4
// throws std::bad_alloc
uint8vec_t vSecret (&keySecret ()[0], &keySecret ()[0] + keySecret ().length ());
Run Code Online (Sandbox Code Playgroud)
他们都很糟糕,你恰好在第二种情况下得到了正确的行为.问题是每次都keySecret返回一个不同的std::string对象.你不能begin在一个和end另一个上打电话,并期望它们以任何方式相关.
你应该改为调用keySecret一次,做一个本地副本,然后调用begin和end该单个本地对象.