草庐IT

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++ - 使用字符串与字符数组时的性能差异有多大?

我有以下代码:charfname[255]={0}snprintf(fname,255,"%s_test_no.%d.txt",baseLocation,i);对比std::stringfname=baseLocation+"_test_no."+std::to_string(i)+".txt";哪个表现更好?第二个是否涉及临时创建?有没有更好的方法来做到这一点? 最佳答案 让我们计算一下:2022编辑:将Quick-Bench与GCC10.3结合使用并使用C++20进行编译(对constness进行了一些小的更改)表明std::s

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通过传递随机访问迭代器对