小编Nav*_*een的帖子

将字符串转换为标题大小写

我有一个字符串,其中包含大写和小写字符混合的单词.

例如: string myData = "a Simple string";

我需要将每个单词的第一个字符(用空格分隔)转换为大写.所以我希望结果如下:string myData ="A Simple String";

有没有简单的方法来做到这一点?我不想拆分字符串并进行转换(这将是我的最后手段).此外,保证字符串是英文的.

c# string

282
推荐指数
9
解决办法
23万
查看次数

std :: string length()和size()成员函数

我正在阅读这个问题的答案,发现实际上有一个方法length()需要std::string(我总是使用size()).在std::string课堂上有这种方法有什么特别的原因吗?我读过MSDN和CppRefernce,它们似乎表明size()和之间没有区别length().如果是这样的话,是不是让这个班级的用户更加困惑?

c++ string size stl

240
推荐指数
2
解决办法
14万
查看次数

为什么'this'是指针而不是引用?

我正在阅读这个问题的答案C++的优点和缺点,并在阅读评论时得到了这个疑问.

程序员经常发现令人困惑的是"this"是指针而不是引用.另一个困惑是为什么"hello"不是std :: string类型但是求值为char const*(指针)(在数组到指针转换之后) - Johannes Schaub - litb于2008年12月22日在1:56

这只表明它没有使用与其他(后来的)语言相同的约定. - le dorfier 2008年12月22日3:35

我称之为"这个"的事情虽然是一个非常微不足道的问题.还有哎呀,感谢我在未定义行为的示例中捕获了一些错误.:)虽然我不明白大小的信息与第一个中的任何东西有关.根本不允许指针指向已分配的内存 - jalf 08年12月22日4:18

这是一个不变的人吗? - yesraaj 08年12月22日6:35

如果方法是const int getFoo()const,这可以是常量; < - 在getFoo的范围内,"this"是常量,因此是readonly.这可以防止错误并为调用者提供某种程度的保证,即对象不会更改. - 道格T. 2008年12月22日16:42

你不能重新分配"这个".即你不能做"this =&other;",因为这是一个右值.但这是T*类型,而不是T const类型.即它是一个非常量指针.如果你在const方法中,那么它是一个指向const的指针.T const.但是指针本身是无关紧要的 - 约翰内斯·绍布 - 在2008年12月22日17:53

想到这个"this":#define this(this_ + 0),编译器将"this_"创建为指向对象的指针,并使"this"成为关键字.你不能指定"this"因为(this_ + 0)是一个右值.当然那不是它的原因(没有这样的宏),但它可以帮助理解它 - Johannes Schaub - litb 2008年12月22日17:55

我的问题是,为什么this指针不是引用?使它成为指针的任何特殊原因?


为什么this作为参考的一些进一步的论点是有道理的:

  • 考虑Item 1来自More Effective C++:当保证我们有一个有效的对象,即不是NULL(我的解释)时,使用引用.
  • 此外,引用被认为比指针更安全(因为我们不能用一个迷路指针拧紧内存).
  • 第三,访问references(.)的语法比访问指针(->(*))更好,更短.

c++ pointers reference c++-faq this

178
推荐指数
3
解决办法
3万
查看次数

四舍五入到下一个2的幂

我想写一个函数,返回最近的2个数的下一个幂.例如,如果我的输入是789,输出应该是1024.有没有任何方法可以实现这一点而不使用任何循环但只使用一些按位运算符?

c optimization bit-manipulation

170
推荐指数
14
解决办法
16万
查看次数

从矢量中删除元素

我想使用erase方法从向量中清除元素.但是这里的问题是元素不能保证在向量中只出现一次.它可能存在多次,我需要清除所有这些.我的代码是这样的:

void erase(std::vector<int>& myNumbers_in, int number_in)
{
    std::vector<int>::iterator iter = myNumbers_in.begin();
    std::vector<int>::iterator endIter = myNumbers_in.end();
    for(; iter != endIter; ++iter)
    {
        if(*iter == number_in)
        {
            myNumbers_in.erase(iter);
        }
    }
}

int main(int argc, char* argv[])
{
    std::vector<int> myNmbers;
    for(int i = 0; i < 2; ++i)
    {
        myNmbers.push_back(i);
        myNmbers.push_back(i);
    }

    erase(myNmbers, 1);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这段代码显然崩溃了,因为我在迭代它时改变了向量的末尾.实现这一目标的最佳方法是什么?也就是说有没有办法做到这一点,而无需多次迭代矢量或创建一个矢量的副本?

c++ stl vector erase

94
推荐指数
3
解决办法
13万
查看次数

删除指向const的指针(T const*)

我有一个关于const指针的基本问题.我不允许使用const指针调用任何非const成员函数.但是,我可以在const指针上执行此操作:

delete p;
Run Code Online (Sandbox Code Playgroud)

这将调用类的析构函数,它实质上是一个非const'方法'.为什么允许这样做?它只是支持这个:

delete this;
Run Code Online (Sandbox Code Playgroud)

还是有其他原因吗?

c++ const delete-operator

83
推荐指数
5
解决办法
2万
查看次数

矢量或地图,哪一个使用?

我听过很多人说如果容器中预期的元素数量相对较小,最好使用std::vector而不是std::mapeventHough我只使用容器进行查找而不是迭代.

这背后的真正原因是什么?

显然,map的查找性能不会比矢量的查找性能差(尽管可能是纳秒/微秒),那么它与内存使用情况有关吗?

在虚拟地址空间的分段中,矢量是否比映射更好/更差?

我正在使用随Visual Studio一起提供的STL库(即微软实现)与其他实现有什么不同?

c++ performance stl

63
推荐指数
4
解决办法
7万
查看次数

为什么没有std :: copy_if算法?

在C++中没有std :: copy_if算法的具体原因是什么?我知道我可以使用std :: remove_copy_if来实现所需的行为.我认为它是在C++ 0x中出现的,但是一个简单的copy_if需要一个范围,一个输出迭代器和一个仿函数就可以了.它只是简单地错过了还是还有其他原因呢?

c++ algorithm stl

63
推荐指数
5
解决办法
1万
查看次数

'bool'是C++中的基本数据类型吗?

我在编写代码时遇到了这个疑问.'bool'是C++标准中定义的基本数据类型还是编译器提供的某种扩展?我有这个疑问,因为Win32有'BOOL',这只不过是一个长期的typedef.如果我做这样的事情会发生什么:

int i = true;
Run Code Online (Sandbox Code Playgroud)

是否"始终"保证变量i的值为1,还是取决于我使用的编译器?对于一些接受BOOL作为参数的Win32 API,如果我传递bool变量会发生什么?

c++

58
推荐指数
3
解决办法
11万
查看次数

Windows上MBCS和UTF-8的区别

我正在阅读关于Windows上的字符集和编码.我注意到Visual Studio编译器(用于C++)中有两个编译器标志,称为MBCS和UNICODE.他们之间有什么区别?我没有得到的是UTF-8在概念上与MBCS编码有何不同?另外,我在MSDN中找到以下引用:

Unicode是一种16位字符编码

这否定了我读到的关于Unicode的任何内容.我认为unicode可以使用不同的编码进行编码,例如UTF-8和UTF-16.有人能否对这种混乱有所了解?

windows unicode character-encoding mbcs

58
推荐指数
4
解决办法
3万
查看次数