草庐IT

STL-string

全部标签

c++ - 在 C++ 的编译时检查类型是否为 std::basic_string<T>

我在我的C++代码中定义了is_string:#includetemplatestructis_string{staticconstboolvalue=false;};templatestructis_string>{staticconstboolvalue=true;};intmain(){std::cout::value::value对于std::string和std::wstring都是如此。但我需要这样的谓词:is_string::value//tobetrueis_string::value//tobefalseis_string::value//tobefalseis_st

C++/STL 我应该使用哪种算法来检查容器是否有重复项?

是否有任何STL算法可以判断容器是否具有重复元素(使用operator==或给定谓词)?让我们考虑这两个vector:std::vectorv1{1,2,3};std::vectorv2{1,2,1};我希望有这样的功能:std::is_exclusive(v1.begin(),v1.end());//returningtruestd::is_exclusive(v2.begin(),v2.end());//returningfalse有这么简单的功能吗?我找不到任何(找到std::unique,但这会修改​​vector...)注意:我不是在问如何“检查容器是否有重复项”,我知道我该

c++ - string::capacity/reserve() 算作终止 null 吗?

从cppref对capacity()的描述来看并不明显和reserve()是否计算终止空字符。 最佳答案 标准statesthat:Inallcases,size().和size()不包括终止空值。因为有可能size()等于capacity(),在这种情况下,这意味着capacity()也不计算终止空值。请注意,在C++11及更高版本中,mystring.c_str()相当于mystring.data()相当于&mystring[0],和mystring[mystring.size()]保证是'\0'.检查这个Demo.

c++ - 使用具有未定义行为的(STL)拷贝?

在评估中,我选择了选项LINEI上的运行时错误。没有未定义行为这样的选项,尽管我认为这是正确的选择。我不确定,但我认为评估有误。我编译并运行了该程序,它确实打印了3,9,0,2,1,4,5,使用三个不同的编译器(Cpp.sh,here和本地MacOSX).程序是否因LINEI存在未定义行为?#include#include#includeusingnamespacestd;voidprinter(inti){coutv1(mynumbers,mynumbers+7);copy(mynumbers,mynumbers+7,v1.end());//LINEIfor_each(v1.begi

c++ - 无法手动调用 std::string 的析构函数

我正在试验union,并将这个示例设为A类,其中包含匿名union成员。由于union包含一个std::string和一个std::vector我需要为该类定义一个析构函数。但是,当我尝试手动调用~string()时,我得到了union.cpp:Indestructor'A::~A()':union.cpp:14:14:error:expectedclass-namebefore'('tokens_.~string();我不明白这个vector。如果我删除对s._~string();的调用,它可以正常编译。这是编译器错误吗?我正在使用MinGW64。#include#includecl

c++ - STL operator= Visual Studio 2010 的行为发生变化?

我正在尝试使用VisualStudio2010(C++)编译QtScriptGenerator(gitorious),但遇到了编译错误。在寻找解决方案的过程中,我偶尔会看到自VS2008以来由于VS2010的STL实现的变化和/或c++0x一致性变化而引入的编译破损。知道下面发生了什么,或者我该如何解决它?如果有问题的代码似乎是QtScriptGenerator的,我想我会更容易修复它。但在我看来,有问题的代码可能在VS2010的STL实现中,我可能需要创建一个解决方法?附言。我对模板和STL很陌生。我有嵌入式和控制台项目的背景,这些项目直到最近才经常被避免以减少内存消耗和交叉编译器风

c++ - 将 "dumb"函数重构为具有容器迭代器的通用 STL 样式

我已经设法了解了C++的一些功能(for_each、映射函数、使用迭代器...),但是用于接收通用容器和迭代器的模板和函数参数列表的构造仍然让我难以理解。我有一个实际的例子,希望有人能为我说明:采用以下函数处理传入的std::vector并构建进程的许多数据点/迭代的运行总和:/*thefor-loopmethod-notverysavvy*/voidUpdateRunningTotal(int_vec&total,int_vec&data_point){for(inti=0;i;int_vecrunning_total(V_SIZE,0);//createacontainertoho

C++ std::string 与 !=、< 和 > 的用法

这个问题不太可能帮助任何future的访问者;它只与一个小的地理区域、一个特定的时间点或一个非常狭窄的情况有关,这些情况并不普遍适用于互联网的全局受众。为了帮助使这个问题更广泛地适用,visitthehelpcenter.关闭9年前。std::string的用法示例是什么?用!=上课,>,和?

c++ - 在 C++ 中将 int[] 转换为 String

我有一个字符串定义为std::stringheader="00110033";现在我需要字符串来保存数字的字节值,就好像它是这样构造的chardata_bytes[]={0,0,1,1,0,0,3,3};std::stringheader=newstd::string(data_bytes,8).c_str());我使用atoi将初始字符串转换为int数组。现在我不确定如何制作字符串。让我知道是否有更好的方法。 最佳答案 你可以写一个小函数stringint_array_to_string(intint_array[],intsiz

C++ STL - 为什么使用 !(w < *i) 而不是 (w==*i)

vectorvw;//populatevwsort(vw.begin(),vw.end());Widgetw;vector::iteratori=lower_bound(vw.begin(),vw.end(),w);if((i!=vw.end())&&!(w这是我的理解:*i从lower_bound的返回值总是不小于w的返回值。换句话说,w问题来了,为什么不直接使用下面的条件进行校验呢?if((i!=vw.end())&&(w==*i))//whynotuse(w==*i)?//foundwinvw谢谢 最佳答案 因为隐式接口(in