相关疑难解决方法(0)

C++ 11是否允许vector <const T>?

容器需求已从C++ 03更改为C++ 11.虽然C++ 03有一揽子要求(例如复制构造性和向量的可赋值性),但C++ 11定义了每个容器操作的细粒度要求(第23.2节).

因此,只要您只执行某些不需要赋值的操作(构造并且push_back是这样的操作),您可以例如在向量中存储可复制构造但不可赋值的类型(例如具有const成员的结构).; insert不是).

我想知道的是:这是否意味着标准现在允许vector<const T>?我没有看到任何理由它不应该 - const T就像具有const成员的结构一样,是一种可复制构造但不可分配的类型 - 但我可能错过了一些东西.

(让我觉得我可能错过了一些东西的部分原因是,如果你试图实例化vector<const T>,那gcc trunk会崩溃并烧掉,但是vector<T>对于T有const成员的地方来说很好).

c++ const vector c++11

65
推荐指数
4
解决办法
1万
查看次数

我可以在向量中使用const来允许添加元素,但不能对已添加的元素进行修改吗?

我对这个答案的评论让我思考了constness和sort的问题.我玩了一下,把我的问题减少到这个代码的事实:

#include <vector>

int main() {
    std::vector <const int> v;  
}
Run Code Online (Sandbox Code Playgroud)

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

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

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
Run Code Online (Sandbox Code Playgroud)

c++ stl const

60
推荐指数
4
解决办法
4375
查看次数

标签 统计

c++ ×2

const ×2

c++11 ×1

stl ×1

vector ×1