gpt4 book ai didi

c++ - 我可以在 vector 中使用 const 来允许添加元素,但不能修改已添加的元素吗?

转载 作者:IT老高 更新时间:2023-10-28 13:21:58 30 4
gpt4 key购买 nike

我对 this answer 的评论让我想到了 constness 和排序的问题。我玩了一下,将我的问题减少到以下代码:

#include <vector>

int main() {
std::vector <const int> v;
}

不会编译 - 你不能创建一个 const int 的 vector 。显然,我应该知道这一点(并且在智力上我做到了),但我以前从来不需要创造这样的东西。但是,这对我来说似乎是一个有用的构造,我想知道是否有任何方法可以解决这个问题 - 我想将东西添加到 vector (或其他),但一旦添加就不应更改它们。

可能有一些令人尴尬的简单解决方案,但这是我以前从未考虑过的。我可能不应该提到排序(我可能会问另一个问题,请参阅 this 以了解提问的困难)。我真正的基本用例是这样的:

vector <const int> v;     // ok (i.e. I want it to be OK)
v.push_back( 42 ); // ok
int n = v[0]; // ok
v[0] = 1; // not allowed

最佳答案

嗯,在 C++0x 中你可以...

在 C++03 中有一段 23.1[lib.containers.requirements]/3,它说

The type of objects stored in these components must meet the requirements of CopyConstructible types (20.1.3), and the additional requirements of Assignable types.

这是目前阻止您使用 const int 的原因作为 std::vector 的类型参数.

但是,在 C++0x 中,缺少此段落,取而代之的是 T必须是 Destructible 以及对 T 的附加要求是按表达式指定的,例如v = ustd::vector仅在 T 时有效是 MoveConstructible MoveAssignable .

如果我正确解释了这些要求,应该可以实例化 std::vector<const int> ,你只会错过它的一些功能(我猜这就是你想要的)。您可以通过将一对迭代器传递给构造函数来填充它。我认为 emplace_back()应该也可以,虽然我没有找到关于 T 的明确要求为它。

您仍然无法就地对 vector 进行排序。

关于c++ - 我可以在 vector 中使用 const 来允许添加元素,但不能修改已添加的元素吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2759350/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com