草庐IT

str_index

全部标签

c++ - 从 boost multi_index 数组中 move 元素

假设我有可move且不可复制的对象,并且我有带有random_access索引的boost多索引数组。我需要将我的对象移出数组前端,但我找不到任何方法可以在documentation中给我右值/左值引用.我只能看到front()给我不断的引用和pop_front()删除元素,但不返回任何东西。那么有没有办法将元素移出boostmulti-index呢? 最佳答案 添加到@sehe的回答中,下面显示了在您的可move类型不可默认构造的情况下如何修改代码:已编辑:更改代码以正确处理*extracted的破坏。已编辑:添加了std::un

c++ - << s.str() 和 << s.rdbuf() 之间的区别

谁能解释一下细微差别:ofstreamf("test.txt")std::stringstreams;s我主要使用.rdbuf()将字符串流推送到文件(因为它更有效),但是如果字符串流为空,那么文件流就会变坏......?这不傻吗?我觉得我不太明白... 最佳答案 如果无法从流缓冲区中提取任何字符,则“插入”流缓冲区的插入运算符会设置故障位-[ostream.inserters]/9:Ifthefunctioninsertsnocharacters,itcallssetstate(failbit)(whichmaythrowios_

c++ - std::type_index 跨 DLL 是否安全

假设我有一个主DLL,其中有一个这样的类:classTest{public:typedefstd::unordered_mapMap;templatevoidSetValue(intval){SetValue(std::type_index(typeid(T)),val);}templateintGetValue(){returnGetValue(std::type_index(typeid(T)));}protected://Definedin.cppfilevoidSetValue(conststd::type_index&idx,intval){m_Map[idx]=val;}/

c++ - 从 sdl 调色板表面创建 OpenGL 纹理 (SDL_PIXELFORMAT_INDEX8)

我创建了一个bmp并使用SDL_LoadBMP加载它检查生成的SDL_Surface时,我可以看到它的格式为SDL_PIXELFORMAT_INDEX8。我想使用SDL表面使用glTexImage2D生成纹理.通常我只能检查表面接近于此的东西:SDL_Surface*surface=SDL_LoadBMP(filename.c_str());GLenummode=0;Uint8bpp=surface->format->BytesPerPixel;Uint32rm=surface->format->Rmask;if(bpp==3&&rm==0x000000ff)mode=GL_RGB;i

c++ - char * 和 const_cast<char*>(string.c_str()) 有什么区别

我使用外部库来处理两个应用程序之间的udp(OSC)通信。为了格式化将要发送的消息,库需要一个char*但我从UI中得到一个字符串,我必须转换它。当我处理代码的其他部分时,udp部分是硬编码的:char*endofMess="fromsetEndMess";并且工作正常。我认为使用我的字符串很容易让它工作并写道:std::strings="fromsetEndMess";char*endofMess=const_cast(s.c_str());但与第一个例子不同,我收到的消息格式正确,现在我只收到乱码。有人知道它可能来自哪里吗?谢谢!马修编辑:我使用的代码:每次OSCVal发送消息的方

c++ - 如何在 Boost multi_index 复合键中删除?

我正在检查这个Boostmulti_indexcompositekeysusingMEM_FUN谁能告诉我如何为这个例子实现删除功能?现在我在做Name_set_by_last::iteratormitchells=names.get().find("mitchell");names.erase(mitchells);//showserror 最佳答案 names.get().erase(mitchells); 关于c++-如何在Boostmulti_index复合键中删除?,我们在St

c++ - size_t 数据类型可以安全地用于 str.find() 吗?

我一直在查看字符串的find()函数的代码,它们将结果存储在数据类型为size_t的变量中。然而,据我所知,size_t是一个无符号整数,如果find()没有找到预期的字符串,它会返回-1。例如,如果我有strings="asdf";size_ti=s.find("g")cout它给我4294967295。但是,如果我用int数据类型替换size_t,它会给我-1。奇怪的是,当我像这样进行比较时strings="asdf";size_ti=s.find("g")if(i==-1){do_something;}无论i是size_t还是int都有效。那我用哪个?int还是size_t?

c++ - 当字符串保存在一个集合中时,c_str() 是否仍然有效

我有一个旧项目需要维护,其中使用了constchar*。出于某种原因,我想保留大量运行时生成的字符串。所以我创建了一个全局变量std::set来保存这些字符串。当生成新字符串时,除了添加到集合中外,我还会返回并发送newString.c_str(),它将保存在其他地方。例如。std::setg_stringDB;voidArchieveString(AStruct*container,constchar*temporaryString){autoit=g_stringDB.emplace(temporaryString);container->validString=it->first

c++ - C++中c_str()的线程安全

我创建了一个类SettingsClass,它包含静态字符串,这些静态字符串包含MySQLC++连接器库要使用的数据库连接字符串(例如主机名、数据库名、用户名、密码)。每当函数需要连接到数据库时,它都会对这些静态字符串调用.c_str()函数。例如:ClassSettingsClass{public:staticstringhostname;...}SettingsClass;stringSettingsClass::hostname;//AfunctionthatneedstoconnecttotheDBuses:driver=get_griver_instance();driver-

c++ - str.clear() 和 str = ""之间的区别

我有一个C++std::stringstr,我已将其设置为某个字符串,现在想重置它以便再次使用它。调用str.clear()与调用str=""有区别吗?编辑。澄清一下:我通过向其附加一个char数组缓冲区来重用str:str.append(buf) 最佳答案 没有有效的区别。根据实现的不同,使用clear()可能比将char指针分配给零更快。但是,即使情况并非如此,也更喜欢更清楚地表达您的意图的方法。如果要清除字符串,请使用clear()。如果要分配空字符串,请使用=""。虽然我会注意到,但你说,“所以我可以再次使用它。”又用它干什