【问题标题】:How can I push_back data in a vector via a vector::pointer?如何通过vector::pointer push_back 向量中的数据?
【发布时间】:2010-11-12 16:46:40
【问题描述】:

我想使用一个 vector::pointer 来 push_back 里面的数据..

int num;
vector<int> v;
vector<int>::pointer ptr;

ptr = &v[0];

ptr->push_back(num);  // fail
ptr.push_back(num);  // fail
ptr.push_back(&num);  // fail
*ptr.push_back(num);  // fail

似乎没有任何效果..任何想法都将不胜感激..

【问题讨论】:

  • 如果您是 C++ 语言的新手,请不要因为在这里提出这样的问题而感到尴尬。如果我在学习 C++ 时有这样的资源,它会为我节省很多时间和困惑。一本好的入门书也是可取的。

标签: c++ pointers vector


【解决方案1】:

您误解了vector::pointer 是什么。这是指向向量中元素的指针的类型,而不是指向向量本身的指针。

除此之外,我不清楚您为什么要这样做,因为. 表示法工作得很好,并且可以为您节省每次访问时的指针取消引用。如果您发现自己在输入vector&lt;int&gt; *vecPtr = new vector&lt;int&gt;;,请深吸一口气,问为什么不能使用RAII

【讨论】:

    【解决方案2】:

    你不能。您需要使用原始矢量对象。

    如果您想要一个指向向量的指针,您可以执行以下操作:

    vector<int> v;
    vector<int> *pointer = &v;
    
    v.push_back(4);
    pointer->push_back(3);
    

    作为注释,您的代码中vector&lt;int&gt;::pointer 的类型应为int *

    【讨论】:

    • 谢谢大家的回答..现在我明白了..问题已解决!我对 C++ 并不陌生,向量对我来说是新的,而且我有点生疏! (脸红)
    • @Mary P:很高兴为您提供帮助。在 Stack Overflow 上,一旦找到适合您的答案,就会要求您将答案标记为正确答案。在每个答案的投票部分下方,应该有一个复选标记的轮廓,您可以使用它来接受答案。
    【解决方案3】:

    在这种情况下,ptrint* 而不是指向 vector&lt;int&gt; 的指针,因此它无法执行向量运算。当你做作业时:

    ptr = &v[0];
    

    您将指针分配给包含 v[0] 处整数的地址,而不是分配对向量的引用。做你想做的事,你需要做到以下几点:

    int num;
    vector<int> v;
    vector<int>* ptr;
    
    ptr = &v;
    
    ptr->push_back(num);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-09-12
      • 2012-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-15
      相关资源
      最近更新 更多