草庐IT

str_shuffle

全部标签

c++ - 为什么 stringstreams rdbuf() 和 str() 给我不同的输出?

我有这个代码,intmain(){std::stringst;std::stringstreamss;ssstr():"str();std::cout给我这个输出ss.rdbuf()->str():hejhejmeddigss.rdbuf():hejmeddig但这是为什么呢?是因为ostreams对operator 最佳答案 ss.rdbuf()->str();返回所有缓冲区内容的拷贝。在做什么std::cout?查看说明basic_ostream&operator*sb);它从缓冲区逐个字符地读取并将它们写入ostream,直到

c++ - C++ 字符串和 C 字符串 ( .c_str() ) 之间的区别

这个问题在这里已经有了答案:关闭11年前。PossibleDuplicates:Whydoesstd::stringnotprovideaconversiontoconstchar*?Whydoesn'tstd::stringprovideimplicitconversiontochar*?case1:voidreadFile(conststring&inputfile){ifstreamin(inputfile);}case2:voidreadFile(conststring&inputfile){ifstreamin(inputfile.c_str());}当然,我知道如何调用if

c++ - 是否必须释放 std::string.c_str() 或 std::string.data() 返回的指针?

据我所知,当您调用c_str()/data()时,std::string会创建其内容的标识数组拷贝方法(有/没有终止NUL-char,在这里无关紧要)。不管怎样,对象是否也负责释放这个数组,还是我必须这样做?简而言之:std::stringhello("content");constchar*Ptr=hello.c_str();//useit....delete[]Ptr;////really???我只是想在内存分配方面保持安全。 最佳答案 不,您不需要释放ptr指针。ptr指向位于内部位置某处的不可修改字符串(实际上这是编译器的实

c++ - 如果没有正确删除,为什么 wstring::c_str 不会导致内存泄漏

代码段1:wchar_t*aString(){wchar_t*str=newwchar[5];wcscpy(str,"asdf\0");returnstr;}wchar_t*value1=aString();代码段2wstringwstr=L"avalue";wchar_t*value=wstr.c_str();如果代码段2中的值未被删除,则不会发生内存泄漏。但是,如果代码段1中的value1未被删除,则存在内存泄漏。wstring::c_str的内部代码在我看来是一样的。 最佳答案 一条重要规则:您必须对new创建的任何内容使用d

c++ - 为什么data()和c_str()返回的是char const*,而operator[]返回的是char&?

为什么std::string::data和std::string::c_str()返回指向const字符的指针,而std::string::operator[]返回对可变字符的引用?std::stringstring("eightfoldisthegreatest");autos=string.data();*s='r';//illegalautot=&string[0];*t='r';//totallyfineauto&c=string[0];c='r';//totallyfine为什么std::string::data()和std::string::c_str()不返回char*,

c++ - 如何从 std 字符串 (c_str()) 设置 char * 值不起作用

我不知道,但这对我不起作用,当我尝试从返回标准字符串的函数中设置char*值时,我得到了垃圾值:stringfoo(){stringtmp="dummyvalue";returntmp;}char*cc=(char*)foo().c_str();//ifiremovethecastingimgettingerror//wheniprinttheccigetgarbageprintf("%s",cc); 最佳答案 cc指向的数据的生命周期与它来自的字符串的生命周期相同(充其量-如果您修改字符串,它甚至更短)。在你的例子中,foo()的

c++ - std::shuffle 不能用 std::list 编译

我正在尝试打乱一些生成元素的列表。这是代码:std::default_random_enginegenerator(10);std::listlist(10);intn=0;std::generate(list.begin(),list.end(),[&]{returnn++;});std::shuffle(list.begin(),list.end(),generator);它不编译。以下是错误:/include/c++/v1/algorithm:3059:34:Invalidoperandstobinaryexpression('std::__1::__list_iterator'

c++ - Valgrind: "Invalid read"与 c_str 和 strtod

我正在使用strtod()来转换一些输入字符串。在用valgrind检查我的代码时,我遇到了“大小为8的无效读取”。如果b以“i”或“n”开头,则会显示该消息,这就是我到目前为止所发现的。另外,如果我直接创建一个constchar*(不调用c_str()),strtod似乎也可以。这是代码:#include#includeintmain(intargc,char**argv){char*a=0;std::stringb="i";constchar*c=b.c_str();doubled=strtod(c,&a);}和(详细的)valgrind输出:==12638==Memcheck,a

c++ - std::random_shuffle 产生相同的结果,即使 srand(time(0)) 被调用一次

在一个函数中,我想生成一个范围内的数字列表:(该函数只会在程序执行时被调用一次。)voidDataSet::finalize(doubletrainPercent,boolgenValidData){srand(time(0));printf("%d\n",rand());//indices={0,1,2,3,4,...,m_train.size()-1}vectorindices(m_train.size());for(size_ti=0;i结果是这样的:850577673246239710241201288231237几秒钟后:856981140246239710241201288

C++ memcpy 从 c_str 到 char*

我已经做了一些基本的阅读,从我收集到的内容来看,.c_str()总是有一个空终止符。我有一个相当简单的C++程序:intmain(intargc,char**argv){std::stringfrom="hello";charto[20];memcpy(to,from.c_str(),strlen(from.c_str())+1);std::coutmemcpy是否会确保我将一个以null结尾的字符串复制到我的变量中(前提是我的字符串长度较短)? 最佳答案 您应该使用std::string来复制字符串。但是,如果你想那样做,你应该使