草庐IT

STL-string

全部标签

c++ - STL 容器的 std::string_view

这是对string_view的一个很好的解释对象是。除了std::string之外,是否有任何STL容器的“_view”对象?在我看来,拥有它是一件非常有用的事情。想象一个std::vector_view类,它只存储一个start迭代器和一个length字段。不真正拥有底层数据可以显着提高效率。 最佳答案 有一个针对span的提议,它是一个连续对象范围的View:http://wg21.link/p0122.另请参阅:Whatisa“span”andwhenshouldIuseone?.GSL库还提供了gsl::span.这可能有点

c++ - std::string header 仅在 Visual Studio 中吗?

看起来std::string是Community/VC/Tools/MSVC/?/include/xstring中的一个头文件,所有生成的代码应该是包含在构建目标中。如果我是对的,Microsoft如何保证下一个VisualStudio版本不会更改xstring和std::string内部结构?更新1:我对这个问题投了很多反对票,所以让我解释一下为什么我决定问这个问题。我遇到了奇怪的崩溃,我不明白为什么会这样。我使用最新的Qt5.13.0(MSVC2017_x64),我还有一些用VisualStudio2017编译的外部库。都有/MDd,我用dumpbinutil检查了这个。当我尝试运

c++ - 在模板类中定义迭代器时出现 STL 编译错误

下面的代码给出了错误:error:type‘std::list>’isnotderivedfromtype‘Foo’error:expected‘;’before‘iter’#includetemplateclassFoo{public:std::list::iteratoriter;private:std::listelements;};为什么这是正确的? 最佳答案 你需要typenamestd::list::iterator.这是因为list取决于模板参数,因此编译器无法知道名称iterator到底是什么它将在其中(好吧,从技术

c++ - 涉及STL排序算法的令人困惑的SegFault

我正在尝试使用STL重新创建编程明珠第15栏中的程序。我正在尝试使用字符串和索引vector创建后缀数组。我将我读取的单词列表记录在一个名为input的字符串中,该字符串充当我在程序开头从stdin读取的以''分隔的单词列表。在我到达代码的排序部分之前,一切都按预期工作。我想使用STL的排序算法,但我对我似乎正在创建的段错误感到完全困惑。我有:vectorwords;和全局变量stringinput;我定义了我的自定义比较函数:boolwordncompare(unsignedintf,unsignedints){intn=2;while(((f当我运行代码时:sort(words.b

c++ - 关于将 string::swap() 与临时对象一起使用的问题

以下部分演示了我的问题:(GCC上的编译错误)stringstreamss;strings;ss我的错误:constSwap.cc:14:error:nomatchingfunctionforcallto'std::basic_string,std::allocator>::swap(std::basic_string,std::allocator>)'basic_string.tcc:496:note:candidatesare:voidstd::basic_string::swap(std::basic_string&)[with_CharT=char,_Traits=std::c

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++函数将time_t格式化为std::string:缓冲区长度?

我想要一个函数,它将接受一个time_t参数和一个任意格式的字符串并对其进行格式化。我想要这样的东西:std::stringGetTimeAsString(std::stringformatString,time_ttheTime){structtm*timeinfo;timeinfo=localtime(&theTime);charbuffer[100];strftime(buffer,100,formatString.c_str(),timeinfo);std::stringresult(buffer);returnresult;}但是我遇到的一个问题是缓冲区长度。我正在考虑做类似

c++ - STL 容器和不可复制(和不可移动)的对象

由于STL容器要求所有内容都是可复制和可分配的,那么在处理不可复制的对象时首选的习惯用法是什么?我可以想到两种不同的方法:在STL容器中存储(智能)指针而不是对象。摆脱STL容器并实现我自己的列表(例如,每个对象必须包含指向下一个对象的指针)。第二种方法的主要缺点是析构函数的实现(是否应该以递归方式在当前对象之前销毁“下一个”对象?) 最佳答案 SinceSTLcontainersrequirethatallcontentsbecopyableandassignable,whatisthepreferedidiomwhenworki

c++ - 使用 string.at() 或 string[]

在C++中,使用string[x]获取特定位置的字符是否不好?大多数人使用string.at(x)但string[x]不好的原因是什么? 最佳答案 据我所知,大多数人不使用string.at()。如果您的代码编写得很好并且易于理解,那么您应该始终在字符串的范围内工作,因此不需要string.at()提供的运行时边界检查。使用.at()的其他序列容器也是如此。 关于c++-使用string.at()或string[],我们在StackOverflow上找到一个类似的问题:

c++ - std::to_string 与字符串流

下面的代码显示了2个解决方案(std::to_string和std::stringstream)转换intm_currentSoundTime到std::string。std::to_string或std::stringstream更快吗?//ComputecurrentsoundtimeinminuteandconverttostringstringstreamcurrentTime;currentTime或m_currentSoundTimeInMinute=to_string(m_currentSoundTime/60); 最佳答案