[英]How do I put items into a const vector?
我一直在尝试一些不同的方法,但我无法弄清楚。 我得到的声明是:
const std::vector<std::string>&,
我一直试图这样做:
gradeReported.push_back(firstEntry);
我一直在收到错误。 我很确定它与向量的const性质有关。 帮助将不胜感激!
你没有。 如果是const
,则无法修改。 您需要制作副本或通过非const引用来获取它。
您不能将项目放入const向量中,向量状态是它所包含的项目,向向量添加项目会修改该状态。
如果要附加到矢量,则必须使用非常量参考。
void f(std::vector<int>& v)
{
v.push_back(4);
}
如果你有一个const
向量,这意味着你只能从该向量中读取元素。
使用const
限定符时,相同的规则适用于任何其他类型的向量。
为了能够修改它,您将需要复制原始向量或采用非const引用。
const向量的重点是你无法修改它。 向其添加元素将是一种修改,因此违反了其常量。 这就是为什么你不能这样做的原因。 这是设计的。
你不应该能够改变它,这就是const的重点。 它主要用于将参数传递给函数/方法,并确保它不会被修改。
如果您确实需要更改它,有两种选择:
const std::vector<std::string>& foo;
std::vector<std::string> bar(foo);
我强烈建议不要使用它,但它可能是一个选项。
假设字符串向量在作为参数传递给方法或函数之前被赋予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,或者如果不可能使用它
const_cast<std::vector<std::string>& >(gradeReported).push_back(firstEntry);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.