不能使用vector :: insert“没有重载函数的实例......”

时间:2017-04-16 13:04:46

标签: c++ algorithm c++11 vector compiler-errors

class largeNum
{

public:
     std::vector<int>& getValue();

private:
    std::vector<int> value;
};

这是我使用getValue()方法的基类。

std::vector<int>& largeNum::getValue() {
    return value;
}

现在出现错误,试图在向量中插入值:

largeNum operator+(largeNum& summand1, largeNum& summand2) {
    largeNum returnNum;
    int size = 0;
    //adapts the smaller vektor to the larger vektor by resizing him and reversing him so 1 turns into 00...01
    if (summand1.getValue().size() > summand2.getValue().size()) {
        for (int i = 0; i < (summand1.getValue().size() - summand2.getValue().size()); i++) {
            //error happens here
            summand2.getValue().insert(0, 0);
        }
    }
[...]

有趣的是,我可以使用除vector::insertvector::erase之外的所有方法。

它给我一个错误,说我需要传递两个整数,我正在做。

  

没有重载函数的实例“std :: vector&lt; _Ty,_Alloc&gt; :: insert [with _Ty = int,_Alloc = std :: allocator&lt; int&gt;]”匹配参数列表

2 个答案:

答案 0 :(得分:4)

overloads of vector<T>::insert都没有占据位置。它们都采用迭代器,因此您需要在向量上调用begin来获取插入位置。

为避免两次调用summand1.getValue(),请将结果存储在引用中:

std::vector<int> &tmp = summand1.getValue();
tmp.insert(tmp.begin(), 0);

答案 1 :(得分:1)

wordCountsWithGroup.map(x => (x._1, x._2.map(_._1).sum) 的第一个参数必须是迭代器,而不是insert()

此外,让一个公共成员函数返回对私有成员的引用是一种难闻的气味,因为你实际上正在打破封装。

因此我的建议是使用模式&#34;告诉,不要问&#34;:

int