如何使用指向向量的共享指针将元素推入向量

问题描述 投票:0回答:1

可能是一个初学者问题......但我不知道在这种情况下如何进行推回。

我有一个结构

circle

struct circle
{
    std::string name;
    int PosX;
    int SpeedX;
    int PosY;
    int SpeedY;
    int ColorR;
    int ColorG;
    int ColorB;
    int Radius;
};

我有一个未知行数的字符串数组,其中包含诸如

之类的对象
Circle cBlue 200 200 0.02 0.04 0 0 255 100

在具有指向圆向量的共享指针的函数中,我希望将该圆推回向量中。

void FindCircles(std::shared_ptr<DynamicArray<std::string>> LocalStringArray, std::shared_ptr<std::vector<circle>> MyCircles)
{
    // iterate over the array of strings 
    for (size_t i = 0; i < LocalStringArray->getSize() + 1; i++)
    {
        std::string ConfigElement = LocalStringArray->get(i);
//split the string into separate substrings
        std::vector<std::string> result = splitString(ConfigElement, ' ');

        // when the line is a circle
        if (result[0] == "Circle")
        {
            circle Circle1;
            Circle1.name   = result[1];
            Circle1.PosX   = std::stoi (result[2]);
            Circle1.SpeedX = std::stof (result[4]);
            Circle1.PosY   = std::stoi (result[3]);
            Circle1.SpeedY = std::stof (result[5]);
            Circle1.ColorR = std::stoi (result[6]);
            Circle1.ColorG = std::stoi (result[7]);
            Circle1.ColorB = std::stoi (result[8]);
            Circle1.Radius = std::stoi (result[9]);
            //pushback into Mycircles
        }
    }
}

关于如何反击有什么建议吗?

我尝试取消引用共享指针,但找不到有用的成员函数。

vector shared
1个回答
0
投票

在我的 stringarray 中有 3 个圆圈,推回确实将 3 个圆圈推回到 MyCircles 向量中,但在函数本身之外仍保持活动状态 有时一整夜的睡眠就能解决问题

//find circles and copy them in circle array
void FindCircles(std::shared_ptr<DynamicArray<std::string>> LocalStringArray, std::shared_ptr<std::vector<circle>> MyCircles)
{
    for (size_t i = 0; i < LocalStringArray->getSize() + 1; i++)
    {
        std::string ConfigElement = LocalStringArray->get(i);
        std::vector<std::string> result = splitString(ConfigElement, ' ');

 
        if (result[0] == "Circle")
        {
            circle Circle1;
            Circle1.name   = result[1];
            Circle1.PosX   = std::stoi (result[2]);
            Circle1.SpeedX = std::stof (result[4]);
            Circle1.PosY   = std::stoi (result[3]);
            Circle1.SpeedY = std::stof (result[5]);
            Circle1.ColorR = std::stoi (result[6]);
            Circle1.ColorG = std::stoi (result[7]);
            Circle1.ColorB = std::stoi (result[8]);
            Circle1.Radius = std::stoi (result[9]);
        
            MyCircles->push_back(Circle1);
        }


    }
}
© www.soinside.com 2019 - 2024. All rights reserved.