是否返回c+中的向量+;追加 我在C++中使用向量,我得到了下面的MWE,我不太理解: #include <iostream> #include <vector> using namespace std; vector<double> pb() { vector<double> a; a.push_back(1); a.push_back(2); a.push_back(3); return a; } int main() { vector<double> asd; asd = pb(); cout << asd.size() << endl; asd = pb(); cout << asd.size() << endl; //WHY DOES THIS GIVE 3, AND NOT 6? asd HAS NOT BEEN EMPTIED AT ANY POINT return 0; } #包括 #包括 使用名称空间std; 向量pb() { 载体a; a、 推回(1); a、 推回(2); a、 推回(3); 返回a; } int main() { 向量asd; asd=pb(); cout

是否返回c+中的向量+;追加 我在C++中使用向量,我得到了下面的MWE,我不太理解: #include <iostream> #include <vector> using namespace std; vector<double> pb() { vector<double> a; a.push_back(1); a.push_back(2); a.push_back(3); return a; } int main() { vector<double> asd; asd = pb(); cout << asd.size() << endl; asd = pb(); cout << asd.size() << endl; //WHY DOES THIS GIVE 3, AND NOT 6? asd HAS NOT BEEN EMPTIED AT ANY POINT return 0; } #包括 #包括 使用名称空间std; 向量pb() { 载体a; a、 推回(1); a、 推回(2); a、 推回(3); 返回a; } int main() { 向量asd; asd=pb(); cout,c++,vector,C++,Vector,在函数pb中创建一个新的向量,并将三个项目推入其中,然后返回。然后将其复制到main函数中的asb,并删除旧内容 函数pb如何知道它应该附加到向量?它不知道。你必须将它传递给函数 void pb(std::vector<double>& a) { // Push back items... } int main() { std::vector<double> asd; pb(asd); // ... } void pb(标准

在函数
pb
中创建一个新的向量,并将三个项目推入其中,然后返回。然后将其复制到
main
函数中的
asb
,并删除旧内容

函数
pb
如何知道它应该附加到向量?它不知道。你必须将它传递给函数

void pb(std::vector<double>& a)
{
    // Push back items...
}

int main()
{
    std::vector<double> asd;

    pb(asd);

    // ...
}
void pb(标准::向量&a)
{
//推回项目。。。
}
int main()
{
std::矢量asd;
pb(asd);
// ...
}

如您所见,我将函数更改为不返回向量。相反,它作为参考参数传递。

在函数
pb
中,您创建一个新向量,并将三个项推入其中,然后返回。然后将其复制到
主函数中的
asb
,并删除旧内容

函数
pb
如何知道它应该附加到向量?它不知道。你必须将它传递给函数

void pb(std::vector<double>& a)
{
    // Push back items...
}

int main()
{
    std::vector<double> asd;

    pb(asd);

    // ...
}
void pb(标准::向量&a)
{
//推回项目。。。
}
int main()
{
std::矢量asd;
pb(asd);
// ...
}
如您所见,我将函数更改为不返回向量。相反,它作为引用参数传递。

它不是每次都“初始化”;它是使用函数调用的结果重新分配的,该函数调用包含3项。重新分配时,旧内容将被销毁

如果要追加,请使用
append
成员函数,而不是重新分配。或者,传递对该函数的引用并追加到该函数,而不是追加到新向量。

它未“初始化”每次;它都会被重新分配函数调用的结果,其中包含3项。重新分配时,旧内容会被销毁


如果要追加,请使用
append
成员函数,而不是重新分配。或者,传递对该函数的引用并追加到该函数,而不是追加到新向量。

长话短说,这将为您提供所需的答案:

vector<double> pb(vector<double> &a)
{
    a.push_back(1);
    a.push_back(2);
    a.push_back(3);
}

int main()
{
    vector<double> asd;
    pb( asd );
    cout << asd.size() << endl;

    pb( asd );
    cout << asd.size() << endl; //WHY DOES THIS GIVE 3, AND NOT 6? asd HAS NOT BEEN EMPTIED AT ANY POINT

    return 0;
}
向量pb(向量a)
{
a、 推回(1);
a、 推回(2);
a、 推回(3);
}
int main()
{
向量asd;
pb(asd);

长话短说,这应该会给你你想要的答案:

vector<double> pb(vector<double> &a)
{
    a.push_back(1);
    a.push_back(2);
    a.push_back(3);
}

int main()
{
    vector<double> asd;
    pb( asd );
    cout << asd.size() << endl;

    pb( asd );
    cout << asd.size() << endl; //WHY DOES THIS GIVE 3, AND NOT 6? asd HAS NOT BEEN EMPTIED AT ANY POINT

    return 0;
}
向量pb(向量a)
{
a、 推回(1);
a、 推回(2);
a、 推回(3);
}
int main()
{
向量asd;
pb(asd);

你为什么期望这样?你期望
a=3
a
中增加3吗?向量被“初始化”的原因(不是技术术语),不是对
pb
的调用。它是对
操作符=
的调用,其中
asd
作为左操作数。您为什么期望这样?您期望
a=3
将3添加到
a
?向量被“初始化”的原因(不是技术术语),不是对
pb
的调用。它是对
operator=
的调用,其中
asd
作为左操作数。您说
pb
返回向量,但它没有
return
语句。您说
pb
返回向量,但它没有
return
语句。