初始化通过引用传递的向量
问题描述:
我有一个类Pixel
和类Image
带有用于更新像素行的函数。我想初始化像素线。我的问题是初始化矢量。其实我有这样的:初始化通过引用传递的向量
bool UpdateLine(std::vector<Pixel>& line, int nb)
{
bool noError = true;
line = new std::vector<Pixel>(nb);
// Do some stuff
return noError;
}
当我试试这个,我有:
没有可行的重载 '='
我怎么能初始化向量?
答
您正在使用的表达:
new std::vector<Pixel>(nb)
返回一个指向std::vector<Pixel>
(即:std::vector<Pixel> *
),而不是一个std::vector<Pixel>
,这是你所需要的。
区分初始化和之间分配有许多工作要做:你是分配到line
而不是初始化它。
您可以创建一个新的载体,由赋值运算符的方式分配它line
:
line = std::vector<Pixel>(nb);
+0
谢谢,我会再次拿起我的书,我可能误会了 –
答
你要做的就是分配,未初始化。
初始化向量可以做这样的:
std::vector<int> second (4,100); // four ints with value 100
在你的情况然而,矢量已经声明的功能之外,所以在这种情况下,你使用vector::resize
并做到这一点:
line.resize(nb); // creates 'nb' objects 'Pixel'
PS:您不需要new
关键字,除非您为您的向量动态分配内存。
这不是Java或C#。 'line.resize(nb);' – WhozCraig
在你的代码中,你不是*初始化矢量,而是分配给它。 –
@NFFX你是怎么想的? – 2017-09-26 09:49:43