如何将项目放入const向量?

时间:2012-03-21 18:11:00

标签: c++ vector

我一直在尝试一些不同的方法,但我无法弄清楚。我得到的声明是:

const std::vector<std::string>&,

我一直在尝试这样做:

gradeReported.push_back(firstEntry);

我一直收到错误。我很确定它与向量的const性质有关。帮助将不胜感激!

6 个答案:

答案 0 :(得分:6)

你没有。如果是const,则无法修改。您需要复制或通过非const引用进行复制。

答案 1 :(得分:4)

你不能将项目放入const向量中,向量状态是它所持有的项目,向向量中添加项目会修改该状态。

如果要附加到矢量,则必须使用非常量参考。

void f(std::vector<int>& v)
{ 
    v.push_back(4);
}

答案 2 :(得分:2)

如果您有const向量,则表示您只能读取该向量中的元素 当您使用const限定符时,相同的规则适用于任何其他类型的向量。

为了能够修改它,你要么必须复制原始载体,要么采用非const引用。

答案 3 :(得分:1)

const向量的要点是你无法修改它。向其添加元素将是一种修改,因此违反了其常量。这就是为什么你不能这样做的原因。这是设计的。

答案 4 :(得分:1)

你不应该能够改变它,这就是const的重点。它主要用于将参数传递给函数/方法,并确保它不会被修改。

如果您确实需要更改它,有两种选择:

  1. 制作矢量副本并改为修改。
  2. 通过const_cast删除const。
  3. 制作副本

    const std::vector<std::string>& foo;
    std::vector<std::string> bar(foo);
    

    通过const_cast

    删除const

    我强烈建议不要使用它,但它可能是一个选项。

    假设字符串向量在作为参数传递给方法或函数之前被赋予const保护,并且基础类型实际上不是const,那么可以执行以下操作:

    typedef std::vector<std::string> string_vector;
    void f(const string_vector& foo) {
        const string_vector& foo;
        const_cast<string_vector>(foo).push(firstEntry);
    }
    
    int main() {
        string_vector foo();
        f(foo);
    }
    

答案 5 :(得分:-1)

您必须在声明中删除const,或者如果不可能使用

const_cast<std::vector<std::string>& >(gradeReported).push_back(firstEntry);