如何将项放入常量向量中
How do I put items into a const vector?
我已经尝试了很多不同的方法,但我想不通。我得到的声明是:
const std::vector<std::string>&,
我一直在努力做到这一点:
gradeReported.push_back(firstEntry);
我总是犯错误。我确信这与向量的常数性质有关。我们将不胜感激!
您没有。如果是const
,则不能修改。您需要制作一个副本或通过非常量引用获取它。
不能将项放入常量向量中,向量状态是它所包含的项,向向量中添加项会修改该状态。
如果你想附加到一个向量,你必须接受一个非常常量参考
void f(std::vector<int>& v)
{
v.push_back(4);
}
如果有const
向量,则意味着您只能从该向量中读取元素
当您使用const
限定符时,同样的规则适用于向量和任何其他类型。
为了能够对其进行修改,您必须复制原始向量或获取一个非常数引用。
常量向量的全部意义在于你不能修改它。向它添加元素将是一种修改,因此违反了它的常量。这就是你不能做的原因。这是故意的。
您不应该更改它,这就是常量的意义所在。它主要用于将参数传递给函数/方法,并保证它不会被修改。
如果你真的需要改变它,有两个选项:
- 制作矢量的副本并修改它
- 通过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);
相关文章:
- 初始化指针的常量向量
- 将编译时常量向量转换为堆分配版本
- 在<uint8_t> <char> c++ 中将常量向量转换为常量向量
- 对常量向量进行常量unique_ptr
- 常量向量中的非常量
- 如何将智能指针向量转换为常量向量,该常量向量包含指向常量的智能指针
- 使用 auto 遍历指针的常量向量
- 如何将常量向量转换为非常量
- C++:访问由另一种方法返回的向量的常量向量时出现分段错误
- 在编译时使用模板初始化指向数组的指针的常量向量
- 上调常量向量
- 错误推回对常量向量元素的引用
- 如何初始化静态常量向量
- 是否可以迭代"常量向量<int>"?
- 如何初始化类C++的成员常量向量
- 如何在 C++11 中的函数内初始化线程安全静态常量向量
- 我们可以使用 const_cast 将常量向量转换为<string>向量<string>吗?
- 在 VC++ 2010 中传入常量向量
- 在 Visual Studio 2012 中初始化矢量的静态常量向量
- 常量向量暗示常量元素