c++ - 我的 vector 结构没有按预期进行迭代

标签 c++ vector iterator

我没有收到任何错误,但我的输出不是我想要的。我想让'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/

相关文章:

C++ 嵌套模板类语法

c++ - 使用映射迭代器编译错误

c++ - 在多个 vector 的组合上实现迭代器

c++ - 非静态成员函数的中断处理

c++ - 错误 : Must have class type

c++ - 获取单非循环链表中指针后面节点的值

c++ - 如何在 C++ 中获取 "Padding"图像

c++ - 为什么我的 vector 会丢弃它的数据?

c++ - 我可以在 C++ 中通过 operator[] 正确设置 std::vector 的第 n 个值吗?

r - 具有相应名称的求和向量