草庐IT

vector_c

全部标签

c++ - 为什么 'std::vector<int> b{2};' 创建一个 1 元素 vector ,而不是 2 元素 vector ?

过去几天我一直在玩C++11,但我想出了一些奇怪的东西。如果我想统一初始化一个int:inta{5};但是如果我对std::vector做同样的事情:std::vectorb{2};不构造一个二元素数组,而是构造一个具有一个值为2的元素的数组。似乎要获得这种效果,需要更加明确:std::vectorc{{2}};std::vectord={2};但不像b的声明-这似乎不一致。我见过一些其他的东西达到同样的效果。我要问的是——这种行为是在最终的C++11标准中,还是只是在早期实现的草案中?如果是这样,为什么标准委员会会包括这种行为?似乎它违背了统一初始化的全部目的,因为必须记住哪些类具有

c++ - 为什么 'std::vector<int> b{2};' 创建一个 1 元素 vector ,而不是 2 元素 vector ?

过去几天我一直在玩C++11,但我想出了一些奇怪的东西。如果我想统一初始化一个int:inta{5};但是如果我对std::vector做同样的事情:std::vectorb{2};不构造一个二元素数组,而是构造一个具有一个值为2的元素的数组。似乎要获得这种效果,需要更加明确:std::vectorc{{2}};std::vectord={2};但不像b的声明-这似乎不一致。我见过一些其他的东西达到同样的效果。我要问的是——这种行为是在最终的C++11标准中,还是只是在早期实现的草案中?如果是这样,为什么标准委员会会包括这种行为?似乎它违背了统一初始化的全部目的,因为必须记住哪些类具有

c# 等效于 c++ vector 或双端队列

我几乎可以肯定这应该是重复的,但我搜索了一段时间并找不到答案。我应该在C#中使用什么来替换C++vector和双端队列有效。那就是我需要一种结构,它既能有效地支持直接索引,又能以一种有效的方式再次支持从一端或两端删除(取决于vector或双端队列)。在java中,我通常至少将ArrayList用于vector,但对于C#,我发现thissource说明:ArrayList动态调整大小。随着元素的添加,它的容量会增加以容纳它们。它最常用于较旧的C#程序中。。那么这样做的新方法是什么?我又该如何处理双端队列的情况? 最佳答案 没有内置的

c# 等效于 c++ vector 或双端队列

我几乎可以肯定这应该是重复的,但我搜索了一段时间并找不到答案。我应该在C#中使用什么来替换C++vector和双端队列有效。那就是我需要一种结构,它既能有效地支持直接索引,又能以一种有效的方式再次支持从一端或两端删除(取决于vector或双端队列)。在java中,我通常至少将ArrayList用于vector,但对于C#,我发现thissource说明:ArrayList动态调整大小。随着元素的添加,它的容量会增加以容纳它们。它最常用于较旧的C#程序中。。那么这样做的新方法是什么?我又该如何处理双端队列的情况? 最佳答案 没有内置的

c++ - 什么是 C++17 中的 std::vector 推导指南?

我阅读了std::vector的扣除指南从使用cppreference.示例:#includeintmain(){std::vectorv={1,2,3,4};std::vectorx{v.begin(),v.end()};//usesexplicitdeductionguide}所以,我对此有一些疑问:什么是std::vectorC++17中的推导指南?为什么以及何时需要vector推导?这里是x一个std::vector或std::vector>? 最佳答案 Whatarestd::vectordeductionguidesin

c++ - 什么是 C++17 中的 std::vector 推导指南?

我阅读了std::vector的扣除指南从使用cppreference.示例:#includeintmain(){std::vectorv={1,2,3,4};std::vectorx{v.begin(),v.end()};//usesexplicitdeductionguide}所以,我对此有一些疑问:什么是std::vectorC++17中的推导指南?为什么以及何时需要vector推导?这里是x一个std::vector或std::vector>? 最佳答案 Whatarestd::vectordeductionguidesin

c++ - 如何廉价地将 C 样式数组分配给 std::vector?

目前我执行以下操作://float*c_array=newfloat[1024];voidFoo::foo(float*c_array,size_tc_array_size){//std::vectorcpp_array;cpp_array.assign(c_array,c_array+c_array_size);delete[]c_array;}如何优化此分配?我不想执行元素复制,而只是交换指针。 最佳答案 当前的std::vector不提供任何功能或接口(interface)来获取先前分配的存储的所有权。想必意外传入堆栈地址太容

c++ - 如何廉价地将 C 样式数组分配给 std::vector?

目前我执行以下操作://float*c_array=newfloat[1024];voidFoo::foo(float*c_array,size_tc_array_size){//std::vectorcpp_array;cpp_array.assign(c_array,c_array+c_array_size);delete[]c_array;}如何优化此分配?我不想执行元素复制,而只是交换指针。 最佳答案 当前的std::vector不提供任何功能或接口(interface)来获取先前分配的存储的所有权。想必意外传入堆栈地址太容

c++ - 使用 std::vector< std::shared_ptr<const T>> 是反模式吗?

很长一段时间我都在使用std::vector和std::shared_ptr手牵手。最近开始使用std::shared_ptr每当需要指向const对象的指针时。没关系,因为std::shared_ptr可以转换为std::shared_ptr然后他们共享相同的引用计数器,一切都感觉很自然。但是当我尝试使用std::vector>等结构时我遇到了麻烦。为简化起见,我将表示这两种结构:templateusingSharedPtrVector=std::vector>;templateusingSharedConstPtrVector=std::vector>;问题是虽然SharedPtr

c++ - 使用 std::vector< std::shared_ptr<const T>> 是反模式吗?

很长一段时间我都在使用std::vector和std::shared_ptr手牵手。最近开始使用std::shared_ptr每当需要指向const对象的指针时。没关系,因为std::shared_ptr可以转换为std::shared_ptr然后他们共享相同的引用计数器,一切都感觉很自然。但是当我尝试使用std::vector>等结构时我遇到了麻烦。为简化起见,我将表示这两种结构:templateusingSharedPtrVector=std::vector>;templateusingSharedConstPtrVector=std::vector>;问题是虽然SharedPtr