【问题标题】:How do I change a vector to a vector of pointers in C++?如何在 C++ 中将向量更改为指针向量?
【发布时间】:2021-11-30 14:00:00
【问题描述】:

我一直遇到这个问题,但我似乎找不到任何可以帮助我的资源。

基本上,我必须在此函数中将vector<User> 更改为vector<User*>

void promptUserAction(vector<User> &players, int playernumber, const Room rooms[], string &strCh,BadGuy bad)
{
    // tell user where they are and describes the room
    cout << (players)[playernumber] << " you are currently in " << rooms[(players)[playernumber].getIndexofCurrentRoom()]
         << endl;
    if ((players)[playernumber].getIndexofCurrentRoom()==bad.getIndexCurrentRoom())
    {
        cout<<"There is a bad guy ("+bad.getName()+") also in the room."<<endl;
    }
    //prompt user for choice
    cout << "What would you like to do?" << endl << "**********************" << endl;
    cin >> strCh;
}

我不知道如何正确调用 main() 函数中的函数。

do {
    promptUserAction(players, User::IndNextUser, rooms, UserAction, badGuy1);

【问题讨论】:

  • 我不知道这到底在问什么,但你问的只是,“我如何将std::vector&lt;Class&gt; 更改为并排的std::vector&lt;Class*&gt;,后者在哪里前者中每个对象的地址?
  • 不,我不这么认为。我正在尝试将矢量 更改为矢量。不是放在一边的。我试图将其从常规向量更改为指针向量。
  • 几乎描述了你想要正是我刚才问的,所以我会再次声明:给定一个具体对象的向量,你是否希望将其转换为指向仍然具体且仍驻留在原始向量中的相同对象的指针向量?诚然,我并没有开始声称我理解为什么你想要这个,并且显示的代码没有给出你甚至需要它的理由,但尽管如此,它至少 似乎 这就是你要问的。
  • 你的问题是 main() 中的玩家是一个向量 吗?只需将参数更改为 promptUserAction 以匹配并执行诸如 player[playernumber]->getIndexofCurrentRoom() 之类的操作
  • 我想通了...如果我发布了整个问题,那将是大约 500 行,但我只是没有改变我最初创建原始向量的位置。从那里我所要做的就是替换所有的“。”用“->”。并更改我使用向量作为向量指针的参数的位置。

标签: c++ pointers vector


【解决方案1】:

当您引用它时,无需像(players) 那样将players 参数括在括号中。将(players)[playernumber] 更改为players[playernumber]

无论如何,您显示的代码中没有任何内容需要vector&lt;User*&gt;,那么您认为为什么需要这种转换?如果你真的需要它(在你没有显示的代码中),那么将vector&lt;T&gt;“转换”为vector&lt;T*&gt;的唯一方法是创建一个新的vector并推送第一个vector的地址s 元素,例如:

vector<T> vec;
...
std::vector<T*> dest;
dest.reserve(vec.size());
for(auto &elem : vec) {
    dest.push_back(&elem);
}

或者:

vector<T> vec;
...
std::vector<T*> dest(vec.size());
std::transform(vec.begin(), vec.end(), dest.begin(),
    [](auto &elem){ return &elem; }
);

【讨论】:

    猜你喜欢
    • 2020-04-13
    • 1970-01-01
    • 2020-06-24
    • 2019-05-15
    • 2019-09-10
    • 2017-04-27
    • 1970-01-01
    • 1970-01-01
    • 2011-08-04
    相关资源
    最近更新 更多