如何将项放入常量向量中

How do I put items into a const vector?

本文关键字:常量 向量      更新时间:2023-10-16

我已经尝试了很多不同的方法,但我想不通。我得到的声明是:

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

我一直在努力做到这一点:

gradeReported.push_back(firstEntry);

我总是犯错误。我确信这与向量的常数性质有关。我们将不胜感激!

您没有。如果是const,则不能修改。您需要制作一个副本或通过非常量引用获取它。

不能将项放入常量向量中,向量状态是它所包含的项,向向量中添加项会修改该状态。

如果你想附加到一个向量,你必须接受一个非常常量参考

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

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

为了能够对其进行修改,您必须复制原始向量或获取一个非常数引用。

常量向量的全部意义在于你不能修改它。向它添加元素将是一种修改,因此违反了它的常量。这就是你不能做的原因。这是故意的。

您不应该更改它,这就是常量的意义所在。它主要用于将参数传递给函数/方法,并保证它不会被修改。

如果你真的需要改变它,有两个选项:

  1. 制作矢量的副本并修改它
  2. 通过const_cast删除const

制作副本

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);
}

您必须删除声明中的常量,或者如果不可能,请使用

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