草庐IT

STD_PROP_LIST

全部标签

c++ - 从已知大小的 double 组构造 std::vector<double>

我有一个指向double组第一个元素的指针:double*p。我也知道数组的长度:n。有没有办法将其复制到std::vector中?最好使用构造函数和分配器。我想做类似的事情std::vectorv=std::vector(p,n);但无法确定哪个构造函数最接近此。我正在使用C++11。 最佳答案 std::vector有一个采用范围的构造函数。你可以像这样使用它:std::vectorv(p,p+n); 关于c++-从已知大小的double组构造std::vector,我们在Stack

C++,通过 const 引用访问 std::map 元素

我对const有疑问。说我有:classA{friendstd::ostream&operatorsomeMap;intsomeInteger;};std::ostream&operator由于与map的const冲突,这种代码在编译时会产生错误(如果我注释掉打印map值的那一行就没问题),如果我去掉函数原型(prototype)中的“const”很好。我真的看不出问题在哪里..有什么帮助吗? 最佳答案 std::map::operator[]不是const,因为如果元素不存在,它会插入一个元素。在C++11中,你可以使用std::

c++ - g++ 是否满足 std::string C++11 要求

考虑以下示例:intmain(){stringx="hello";//copyconstructorhasbeencalledhere.stringy(x);//c_strreturnconstchar*,butthisusageisquitepopular.char*temp=(char*)y.c_str();temp[0]='p';cout>x;return0;}在visualstudio编译器和g++上运行它。当我这样做时,我得到了两个不同的结果。在g++中:x=pelloy=pello在VisualStudio2010中:x=helloy=pello差异的原因很可能是g++st

c++ - std::string::find 在 C++ 中无法正常工作

我正在尝试验证特定字符串是否在输入字符串中,如果是,则根据找到的字符串执行某些操作;但似乎无论如何它总是在做第一个任务......if(inputString.find(str1)>=0){//dosomething}elseif(inputString.find(str2)>=0){//dosomethingelse}else{std::cout无论inputString中是否存在str1,它总是进入//dosomethingblock。如果我这样做intstr1pos=inputString.find(str1);intstr2pos=inputString.find(str2);

c++ - 从 std::list 中移除具有特定值的元素

我需要从std::list中删除具有特定值的元素。随着list我使用了remove()方法。现在我有list所以我想我应该使用remove_if()但它的谓词只需要一个参数-要测试的元素。如何编写函数foo(constCMyClass&Bad)从列表中删除所有等于Bad的元素?谢谢附言structCMyClass{void*Ptr;intVar;}boolis_equal(constCMyClass&A,constCMyClass&B){if(A.Ptr==B.PrtandA.Var==B.Var)returntrue;elsereturnfalse;} 最

C++ printf std::vector

我如何在C++中做这样的事情:voidmy_print(format_string){vectordata;//Fillsvectorprintf(format_string,data);}my_print("%1$s-%2$s-%3$s");my_print("%3$s-%2$s);之前没解释好。格式字符串由应用程序用户输入。在C#中这有效:voidmy_print(format_string){Listdata=newList();//FillslistConsole.WriteLine(format_string,data.ToArray);}my_print("{0}-{1}-

c++ - std::vector 的性能差是因为没有调用 realloc 的对数次数吗?

编辑:我又添加了两个基准测试,以比较realloc与C数组的使用以及reserve()与std::vector的使用。从最后的分析来看,realloc的影响似乎很大,即使只调用了30次。检查文档我猜这是因为realloc可以返回一个全新的指针,复制旧指针。为了完成这个场景,我还添加了用于在初始化期间完全分配数组的代码和图表。与reserve()的区别是显而易见的。编译标志:仅图中描述的优化,使用g++编译,仅此而已。原始问题:我对std::vector与新建/删除数组进行了基准测试,当我添加10亿个整数时,第二个代码比使用vector的代码快得多,尤其是在优化的情况下开启。我怀疑这是v

c++ - 您将如何根据元素的某些属性删除 std::vector 的元素?

例如,如果您有一个std::vector,其中MyClass有一个公共(public)方法:boolisTiredOfLife(),如何去掉返回true的元素? 最佳答案 我更喜欢remove_ifv.erase(remove_if(v.begin(),v.end(),mem_fun_ref(&MyClass::isTiredOfLife)),v.end());remove_if返回指向仍在序列中的最后一个元素之后的迭代器。erase删除从第一个参数到最后一个参数(两个迭代器)的所有内容。

c++ - std::vector 的高效传递

当C++函数接受std::vector参数时,通常的模式是通过const引用传递它,例如:intsum2(conststd::vector&v){ints=0;for(size_ti=0;i我相信这段代码会在访问vector元素时导致双重解引用,因为CPU应该首先解引用v以读取指向第一个元素的指针,该指针需要再次解引用读取第一个元素。我希望在堆栈上传递vector对象的浅表拷贝会更有效。这种浅拷贝将封装一个指向第一个元素的指针和大小,该指针引用与原始vector相同的内存区域。intsum2(vector_refv){ints=0;for(size_ti=0;i通过传递随机访问迭代器对

c++ - std::vector 和多维数组的连续内存

我知道标准不强制std::vector分配连续的内存块,但所有实现都遵守这一点。假设我想创建一个多维静态数组的vector。为简单起见,考虑2个维度和一个长度为N的vector。也就是说,我希望创建一个包含N个元素的vector,例如int[5]。我能确定所有N*5个整数现在在内存中都是连续的吗?这样我原则上就可以通过知道第一个元素的地址来访问所有整数?此实现是否依赖?作为引用,我目前在连续内存块中创建二维数组的方式是首先创建一个长度为N的float*的(动态)数组,在一个数组中分配所有N*5个float,然后复制每个数组的地址第5个元素进入float*的第一个数组。