草庐IT

BEGIN_ARRAY

全部标签

c++ - priorC++11 中的 std::vector::begin() 是否等同于 C++11 中的 std::vector::data()?

是std::vector::begin()来自之前-C++11相当于std::vector::data()在C++11中?我问这个的原因是,在C++11之前,我曾经将std::vector::begin()视为指针,但在C++11之后,它不是,而且我不能转换为等效的指针。那么,我可以在C++11之后改用data()吗? 最佳答案 不,begin返回一个迭代器,而data返回一个指针。对于给定的实现,这些可能是同一件事,但您不应该指望这一点。 关于c++-priorC++11中的std::

c++ - 从 std::array 等获取 size_type 的惯用方法

由thisquestion触发,我想出了以下代码(在我的回答中是boost::array,但同样适用于std::array):template::size_typesize>voidDataTransform(std::arraydata){}我对::size_type一点都不满意.我必须以一定的大小进行实例化,才能知道size_type.对于std::array我本可以使用size_t,那么一般情况呢?如果size_type怎么办不是size_t?或者更一般的(即不适用于std::array)如果size_type怎么办?不同的尺寸是不同的(愚蠢但可能)?我知道这个问题相当学术,有很

c++ - 奇怪的错误,set<int>::begin() 总是返回 const 迭代器

为什么set.begin()总是返回一个const迭代器而不是标准迭代器?35inttest(){36std::setmyset;37myset.insert(2);38myset.insert(3);39int&res=*myset.begin();40returnres;41}test.cpp:39:error:invalidinitializationofreferenceoftype‘int&’fromexpressionoftype‘constint’ 最佳答案 它没有返回const_iterator,而不是std::se

c++ - 函数参数 : Pointer to array of objects

在我的主要功能中,我创建了一个特定类“菜单”的对象数组当我调用一个函数时,我想提供一个指向该数组的指针。Menumenu[2];//Createmenu[0],[1]Function(POINTER_TO_ARRAY);问题:函数参数的正确写法是什么?我尝试:Function(&menu);在头文件中:voidFunction(Menu*menu[]);//notworkingerror:Cannotconvertparameter1fromMenu(*)[2]toMenu*[]voidFunction(Menu*menu);//notworkingerror:Cannotconver

c++ - 使用 std::begin 和 std::end 进行 vector 初始化

为什么可行?有两个不同的字符串"testString"但vector大小分配正确。#include#include#includeintmain(){std::vectorstr;str.assign(std::begin("testString"),std::end("testString"));copy(str.begin(),str.end(),std::ostream_iterator(std::cout,""));std::cout 最佳答案 你很幸运,编译器执行了stringpooling优化。请注意,您所做的仍然是未定

c++ - array<> 不能简单地在内部交换指针

对于用TR1引入STL的容器数组,我有下面的问题。在“TheC++standardlibraryATutorialandReference”一书的第263页中:Note,however,thatanarraycan’tsimplyswappointersinternally.Forthisreason,swap()haslinearcomplexityandtheeffectthatiteratorsandreferencesdon’tswapcontainerswiththeirelements.我想知道为什么array不能考虑交换指针的恒定开销? 最佳答

c++ - "Bring all the zeros to the back of the array"面试挑战的良好 C++ 解决方案

我接受了一份Jr.开发工作的面试,他要求我编写一个程序,该程序接受一个整数数组并将零推到后面。这是约束条件(他一开始没有告诉我......就像在编程面试中经常发生的那样,我在解决问题的同时了解了问题的约束条件,哈哈):必须就地进行;不创建临时数组、新数组等。不必保留非零数字的顺序(我希望他一开始就告诉我)设置:intarr[]={0,-2,4,0,19,69};/*Transformarrto{-2,4,19,69,0,0}or{69,4,-2,19,0,0}oranythingthatpushesallthenonzerostothebackandkeepsallthenonzero

c++ - 将 `std::vector` 替换为 `std::array`

我有一个代码如下:intn;intget_the_number();voidsome_computations();intmain(){n=get_the_number();some_computations()return(0);}get_the_number函数获取一些输入并返回整数n,它在调用后不会被修改。在some_computation函数中有如下代码std::vectormy_array;for(inti=0;i问题:由于my_array的大小是先验已知的,是否可以用替换std::vector>std::array?此外,在肯定的情况下,我是否应该期望在效率方面有所提高?我

c++ - C 和 C++ : Array element access pointer vs int

如果您执行myarray[i]或将myarray[i]的地址存储在指针中,是否存在性能差异?编辑:这些指针都是在我的程序中一个不重要的步骤中计算出来的,性能不是标准。在关键部分,指针保持静态并且不被修改。现在的问题是这些静态指针是否比一直使用myarray[i]更快。​​ 最佳答案 对于这段代码:intmain(){inta[100],b[100];int*p=b;for(unsignedinti=0;i在g++中使用-O3优化构建时,语句:a[i]=i;产生汇编输出:mov%eax,(%ecx,%eax,4)和这个声明:*p++=

C++ 是否在恒定时间内执行 std::set、std::map 等的 begin/end/rbegin/rend?

对于std::set和std::map等以对数时间查找的数据类型,实现是否需要维护开始和结束迭代器?访问begin和end是否意味着查找可能以对数时间发生?我一直假设开始和结束总是在常数时间内发生,但是我在Josuttis中找不到任何对此的证实。既然我正在做一些我需要对性能有所了解的事情,我想确保涵盖我的基础。谢谢 最佳答案 它们发生在常数时间内。我正在查看ISO/IEC14882:2003标准的第466页:表65-容器要求a.开始();(恒定的复杂性)a.end();(恒定的复杂性)表66-可逆容器要求a.rbegin();(恒定