传递一个矢量指针作为方法的输入

Passing a vector pointer as input to a method

本文关键字:指针 方法 输入 一个      更新时间:2023-10-16

我需要确定一个方法处理哪些属性(字符串)。因此,我将我的方法设计如下:

void method1( std::vector<String> * myVector )
{
   myVector = new std::vector<String>();  
   //do something;
   myVector->push_things;
}

那么,我将像这样从topMethod()中调用method1。

topMethod()
{
   std::vector<String> * aVector = 0;
   method1( aVector );
   //process aVector to identify its contents;
}

现在,method1()中的向量myVector得到了很好的填充。但是它的内容在调用方方法(即topMethod())中无法调用。我不确定他们是如何被释放的。我觉得我在使用new进行分配,所以它们应该在调用后出现在调用者位置。

因为你没有传递指针作为引用:

试试这个:

void method1( std::vector<int>* & myVector )
{                          //  ^^^ note this!
   myVector = new std::vector<int>();  
   myVector->push_back(100);
}
//call it 
std::vector<int> *v;
method1(v);

或:

void method1(std::vector<int> & myVector )
{
   myVector.push_back(100);  //myVector is not a pointer now!
}
//call it 
std::vector<int> v;
method1(v);

就我个人而言,我更喜欢以下内容:

std::vector<int> method1()
{
   std::vector<int> myVector;
   myVector.push_back(100); 
   return myVector;
}
//call it 
std::vector<int> v = method1();

除了告诉你为什么你的解决方案是错误的答案之外,我还将提出如何用一种合适的c++方式来实现它。使用引用

void method1(std::vector<int>& v)
{
    v.push_things;
}
int main()
{
   std::vector<int> v;
   method1(v);
}

应该通过引用将指针传递给vector。

你正在赋值给你所传递的指向vector的指针的副本,而不是你所传递的指针。
void method1( std::vector<int>* & myVector )

如果你的方法的任务是创建一个新的向量,那么返回它:

std::vector<int>* method1()

如果你需要额外的信号返回值,创建更多的向量,等等,使用这个:

.. method1( std::vector<int>*& myVector, ..)

如果你的方法的唯一工作是操作一个向量:

.. method1( std::vector<int>& myVector)