草庐IT

clipboard_string

全部标签

c++ - C++ 中的 string[length()] 可以吗?

我同事的代码是这样的:voidcopy(std::stringconst&s,char*d){for(inti=0;i他的应用程序崩溃了,我认为这是因为访问s超出了范围,因为条件应该只达到s.size()-1。但我旁边的其他人说过去曾讨论过这是合法的。谁能帮我解决这个问题? 最佳答案 让我们撇开*d的可能性无效,因为这与问题似乎针对的内容无关:是否std::stringoperator[]()在访问索引std::string::size()处的“元素”时具有明确定义的行为.C++03标准对string::operator[]()的描

c++ - 为什么 std::make_move_iterator 适用于 vector<string> 但不适用于 vector<int>

我期待std::make_move_iterator总是会move内容,但似乎不会。看起来是在vector中move元素但不在vector.请看下面的代码片段:#include#include#include#includevoidmoveIntVector(){std::coutv1;for(unsignedi=0;iv2(std::make_move_iterator(v1.begin()+5),std::make_move_iterator(v1.end()));std::coutv1;for(unsignedi=0;iv2(std::make_move_iterator(v1.

c# - C# 中的 std::string?

我以为问题出在我的C++函数中,但我试过了C++dll中的C++函数:bool__declspec(dllexport)OpenA(std::stringfile){returntrue;}C#代码:[DllImport("pk2.dll")]publicstaticexternboolOpenA(stringpath);if(OpenA(@"E:\asdasd\"))我得到一个内存损坏的异常,为什么?如果我删除std::string参数,它工作得很好,但是对于std::string它不起作用。 最佳答案 std::string和c

c++ - const std::map<boost::tuples::tuple, std::string>?

//BOOSTIncludes#include//Boost::Assign#include//Boost::Assign::List_Of#include//Boost::Assign::Map_List_Of#include//Boost::Tuples//STDIncludes#include#include#include//Usingnamespacesusingnamespacestd;usingnamespaceboost;usingnamespaceboost::assign;//Constsconstmapquery_map=map_list_of("4556_SEL

c++ - 如何将 vector<char*> 转换为 vector<string>/string

我们有一个返回vector的遗留方法字符指针,即vector.现在,我只需要处理字符串(std::string)。我该怎么做?这个问题听起来很简单,但我遇到了几个网站,它们描述了这些考虑因素可能会导致内存泄漏。现在,我要么想要一个vector甚至是没有任何内存泄漏的字符串。我该怎么做? 最佳答案 转换非常简单:std::vectorugly_vector=get_ugly_vector();std::vectornice_vector(ugly_vector.begin(),ugly_vector.end());不过,一旦你这样做了

c++ - 如何提高键类型为 std::string 的 map 查找的性能?

我正在使用std::map(VC++实现),通过map的find方法进行查找有点慢。键类型是std::string。我可以通过map的自定义键比较覆盖来提高此std::map查找的性能吗?例如,也许std::stringstring::size()比较?还有其他加快比较速度的想法吗?在我的情况下,map将始终包含更新:map包含文件路径。更新2:map的元素经常变化。 最佳答案 首先,关闭所有的性能分析和调试开关。这些会极大地减慢STL。如果不是这样,部分问题可能是字符串的前80-90%是相同的。这对map来说不一定是坏事,但它适用

c++ - 使用 boost::singleton_pool 时处理 std::string/std::vector 成员变量

我正在编写一个性能关键型应用程序,我在其中创建了大量类似类型的对象来下订单。我正在使用boost::singleton_pool用于分配内存。最后我的类看起来像这样。classMyOrder{std::vectorv1_;std::vectorv2_;std::strings1_;std::strings2_;public:MyOrder(conststd::string&s1,conststd::string&s2):s1_(s1),s2_(s2){}~MyOrder(){}staticvoid*operatornew(size_tsize);staticvoidoperatorde

c++11 to_string 与 code::blocks -std=c++11 flag already selected

这是我正在尝试编译的代码,是从某个地方的另一个论坛获得的。//to_stringexample#include//std::cout#include//std::string,std::to_stringintmain(){std::stringpi="piis"+std::to_string(3.1415926);std::stringperfect=std::to_string(1+2+4+7+14)+"isaperfectnumber";std::cout我收到错误:'to_string'不是'std'的成员我在其他论坛上读到选择标志“让g++遵循c++11ISO语言标准[-st

c++ - 从 std::string 流式传输而不制作拷贝?

我有一个网络客户端,其请求方法采用std::streambuf*。此方法通过boost::iostreams::copy实现-将其转换为自定义std::streambuf-知道如何将数据写入网络API的派生类,效果很好。这意味着我可以将文件流式传输到请求中,而无需将其全部读入内存。然而,在某些情况下,必须发送不在文件中的大数据block,因此我包含了一个采用字符串的重载。为了避免重复流中的所有网络代码,显然我应该设置一个表示字符串的streambuf并调用其他方法。我想出的唯一方法是:std::istringstreamss(data);send(ss.rdbuf());不幸的是,is

c++ - 在 C++11 中,在函数中返回一个 std::string 是移动还是复制它?

假设我有以下代码。std::stringfoo(){std::stringmystr("SOMELONGVALUE");returnmystr;}intmain(){std::stringresult=foo();}当我调用“foo”时,mystr中的数据是复制还是移动到result中?我相信它是移动的C++11风格,但我希望得到澄清和/或链接来表明这一点。谢谢!编辑:我想在使用g++为c++11或更高版本编译时我想知道这个问题的答案。 最佳答案 您的示例属于所谓的命名返回值优化,它在thisparagraphoftheC++11s