我没有收到任何错误,但我的输出不是我想要的。我想让'stuff + i'成为 vector 的输入。但是我的输出只是我的初始“填充”变量 - 1 个字符。
stuff
tuff
uff
ff
f
/0
/0
gello?
ello?
llo?
gello?
代码:
#include <iostream>
#include <string>
#include <vector>
struct Playlist
{
std::string name;
} ;
int main()
{
std::vector<Playlist> playlist;
std::cout << "Input 10 stuff" << std::endl;
for( int i = 0; i < 10; ++i )
{
Playlist ok;
ok.name = "stuff " + i;
playlist.push_back( ok );
std::cout << playlist.size() << std::endl;
}
std::vector<Playlist>::iterator iter = playlist.begin();
while( iter != playlist.end() )
{
std::cout << iter->name << std::endl;
++iter;
}
std::cout << "gello?" << std::endl;
std::vector::iterator iter = playlist.begin();
while( iter != playlist.end() ) { std::cout << iter->name << std::endl; ++iter; }
std::cout << "gello?" << std::endl;
return 0;
}
最佳答案
更改此声明
ok.name = "stuff " + i;
到
ok.name = "stuff " + std::to_string( i );
至于声明
ok.name = "stuff " + i;
然后在右侧使用了指针算法。字符串文字被转换为指向其第一个元素的指针。所以
"stuff " + 0 returns pointer to character 's'
"stuff " + 1 returns pointer to character 't'
"stuff " + 1 returns pointer to character 'u'
等等。
所以第一个 push_back 处理字符串“stuff”。第二个 - 字符串“tuff”,第三个 - 字符串“uff”等等。
结果是程序有未定义的行为,因为 sizeof( "stuff ") 小于 10 并且您正在尝试访问超出字符串文字的内存。
关于c++ - 我的 vector 结构没有按预期进行迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31061997/