如何在 STL 中使用指向向量的指针,就像我们在将数组地址传递给另一个函数时将指针分配给数组一样?

Posted

技术标签:

【中文标题】如何在 STL 中使用指向向量的指针,就像我们在将数组地址传递给另一个函数时将指针分配给数组一样?【英文标题】:How to use pointers to the vector in STL like we assign pointers to a array while passing address of array to another function? 【发布时间】:2021-12-14 16:59:09 【问题描述】:

如果是数组--->

 void displayu(int * p)
     for(int i = 0 ; i < 3 ; i++)
        
         cout<<p[I];
        
 
main()
int arr[] = 1,2,3;
displayu(arr);

STL中的vectors-->

void displayu(vector <int> * p)
    for (int i = 0; i < p->size(); i++)
    
        cout<<p[i];
    
    

main()
     vector <int> nums0,2,1,5,3,4;
//I tried to do this ;) 
     displayu(nums);

//it is giving me an error .

我试图解决这个问题的另一种方法-->

void displayu(vector <int> * p)
    vector <int> :: iterator Itr = p->begin();

    for (int i = 0; i < p->size(); i++)
    
      cout<<Itr[i];
    
    


int main()
     vector <int> nums0,2,1,5,3,4;
//I tried to do this ;) 
     displayu(nums);

第二种和第三种方法给了我一个错误,但直觉上我认为这是正确的,就像传递 nums 应该传递向量 nums 中第一个元素的地址。我对通过它的名称传递向量(我们在数组中执行它的方式)是正确的吗? 我的问题是否有任何质量改进或任何其他更好的方法?如果有更好的方法请给我建议。 另外,如果你能解释我做错的部分,那就太好了。

【问题讨论】:

您必须在应用 [] 运算符之前取消引用指针。 cout&lt;&lt;(*p)[i]; 可能是最简单、最易读的直接解决方案,但我会使用引用而不是指针。 void displayu(vector &lt;int&gt; &amp; p). displayu(&amp;nums) 将传递nums 的地址,但其余代码存在很多问题......例如p[i] 应该是 p-&gt;at(i),等等,,, 【参考方案1】:

您将函数声明为具有一个参数,即指向向量的指针

void displayu(vector <int> * p)
              ^^^^^^^^^^^^^^^^

但是你调用的函数是传递一个向量类型的对象而不是一个指向向量的指针。

displayu(nums);

至少你应该像这样调用函数

displayu( &nums);

虽然不清楚为什么函数参数有指针类型。

声明和定义函数例如like

void displayu( const std::vector<int> &v )

    for ( const auto &item : v )
    
        std::cout << item << ' ';
    
    
    std::cout << '\n';

void displayu( const std::vector<int> &v )

    for ( std::vector<int>::size_type i = 0; i < v.size(); i++ )
    
        std::cout << v[i] << ' ';
    
    
    std::cout << '\n';

然后这样称呼它

displayu(nums);

数组类型的对象和容器类型向量的对象之间的区别在于,如果对应的参数不是引用类型,则在表达式中使用的数组指示符(例如作为参数表达式)会隐式转换为指向它们的第一个元素的指针。向量没有这种隐式转换。

【讨论】:

以上是关于如何在 STL 中使用指向向量的指针,就像我们在将数组地址传递给另一个函数时将指针分配给数组一样?的主要内容,如果未能解决你的问题,请参考以下文章

通过指针擦除 STL 向量

是否可以安全地使用指向向量元素的指针来确定其在容器中的位置?

在 C++ 中,如何获取指向向量的指针?

实际stl中默认赋值运算符是如何实现的

C++ STL 中向量的恒定时间交换逻辑

当向量在内部类中时,如何删除指向对象的向量指针