[英]How to dynamically instantiate a class with parameterized constructor using std::vector?
我想使用向量動態實例化對象,但是,我不知道如何將參數傳遞給構造函數。
#include <iostream>
#include <cstring>
#include <vector>
using namespace std;
class Player {
public:
Player(int id, string name)
: p_id(id)
, p_name(name)
{
}
public:
int p_id;
string p_name;
};
int main() {
vector<Player> player; **//How to instantiate the object with parametrized constructor**
player.resize(sizeof(player));
return 0;
}
我想,你可能想看看這個:
class Player {
public:
Player() = default;
Player(int id, string name): p_id(id), p_name(name) {}
private:
int p_id;
string p_name;
};
int main() {
vector<Player> players;
// construct a Player from an int and a string
players.emplace_back(33, "Foo");
}
在這里,我們使用std::vector
成員函數emplace_back()
,它在向量內部(在后面)構造一個對象。
您的代碼中還有其他需要注意的事項:
players.resize(sizeof(players)); // Is nonsensical
您應該檢查文檔上std::vector::resize
和文件上sizeof()
簡而言之,我們可以使用resize(n)
來改變容器中元素的數量。
我們可以通過提供大於當前size()
n
來增加元素的數量。 在這種情況下,會附加其他默認插入的元素。
或者通過提供較小的n
減少容器中的元素數量。 在這種情況下,容器的內容被減少到它的前n
元素,刪除那些超出(並銷毀它們)。
請注意,此函數會更改容器的實際內容:
players.emplace_back(11, "Foo");
players.emplace_back(22, "Bar");
players.emplace_back(33, "Buz");
players.resize(2); // Now, players.size() == 2
// ...and there are no Buz among the players
這就是為什么將sizeof(players)
傳遞給resize()
是沒有意義的,尤其是當我們考慮到sizeof()
返回多個字節時。
如果你想有一個vector
與一些數量的預構建的Player
在它的對象,你應該使用矢量的填充構造函數:
// Ten objects of class Player
vector<Player> players(10, Player(0, ""));
// Ten default constructed objects of type Player
vector<Player> players(10); // Player has to have a default constructor
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.