为什么我不能使用指针和长度创建矢量
Why can't I create a vector using a pointer and length
假设我想从一个数组中构造一个C++STL向量(知道它的长度),即我有:
size_t length = /* ... */
int *a = new int[length];
我可以这样构造矢量:
std::vector<int> v(a, a + length);
但不是这样的:
std::vector<int> v(a, length);
为什么向量类没有后一种构造函数?
因为该构造函数是典型的begin
-end
构造函数:
template< class InputIt >
vector( InputIt first, InputIt last,
const Allocator& alloc = Allocator() );
其将内容从CCD_ 3复制到CCD_。
STL的大多数算法都使用[begin, end)
范围,为了一致性,也使用这个构造函数。
C++标准库几乎总是喜欢开始/结束对而不是开始/长度对。这种一致性是有价值的。
人们通常只想要"多一件事",但人们不善于就最重要的一件事达成一致。因此,当你有一个能完成这项工作的界面时,增加一个ctr来增加它的功能是很难的,因为它通常对很多人没有真正的帮助,而且会降低一致性。
因为正如您已经指出的,当功能与现有构造函数完美共存时,在标准库中不需要这样的代码膨胀。
标准容器通常在范围上运行。
取一个指针和一个长度更像是一个C字符串习惯用法;请注意,std::string
确实有这样的构造函数。
为什么向量类没有后一种构造函数?
因为这是多余的。您已经可以在迭代器序列上构造容器(在整个stl中是一致的设计决策),因此额外的构造函数不会添加任何新内容;拥有这种构造函数的唯一原因是,如果在客户端代码中从迭代器对切换到迭代器计数对是不平凡的。
描述序列的方式在C中被大量使用;但这并不意味着它可以成为好的C++。
附带说明:请请不要在C++中使用malloc
(不在生产代码中,不在"一次性编写"代码中,也不用于SO和/或其他地方的简单示例);它给了其他人一个坏代码的例子,并鼓励他们养成坏代码的习惯。
相关文章:
- 如何创建指针链?我想创建具有指向更多对象的指针的对象,该对象具有指针.这可能吗?
- c++ 获取非语法使用"&"创建指针
- 在自定义构造函数中的堆上创建指针
- 创建指针是否超过非数组指针的末尾,而不是从 C++17 中的一元运算符和未定义的行为派生?
- 创建指针会占用大量资源吗?
- 创建指针时是否没有构造函数调用
- 以不寻常的方式创建指针
- 在类中创建指针到另一个对象
- Visual Studio 2015"非标准语法;使用"&"为成员创建指针"
- 创建指针 C++ 时获取段错误
- 当我在 c++ 中创建指针数组时无法读取的内存
- 创建指针列表的正确范例是什么
- 如何在C 11中创建指针映射以静态成员功能
- 奇怪的错误:当没有真正创建指针时,使用已删除的函数'std::unique_ptr<_Tp,_Dp>::unique_ptr
- 如何使用双指针创建指针数组?
- 创建指针数组
- C++:创建指针的副本
- 使用new创建指针数组,这样指针就不会初始化为NULL
- 如何在不从参数列表中创建对象的情况下创建指针
- 如何在定义后创建指针和结构实例