草庐IT

c++ - 如何将 char* 浅复制到 std::string?

我想知道是否可以将char*浅复制到std::string。 最佳答案 如果您的目标是在不复制数据的情况下使用char*构造一个std::string对象:不,这是不可能的。std::string拥有它的资源,它不能引用另一个char*。这也是为什么适当的构造函数采用constchar*而不是char*的原因:它不修改数据,而是复制数据。在C++17中,您有std::string_view,它恰好用于引用它不拥有的字符串(文字)。请注意,此View并非旨在修改数据,因此它再次使用constchar*而不是char*构造。

c++ - 为什么调用 std::vector::back() 会使我的程序崩溃

我不确定这段代码有什么问题:std::vectormyVector(0);if(myVector.back()==12)myVector.push_back(12);似乎在空vector上调用back()会使程序崩溃。我不明白为什么会崩溃?我们需要在调用back()之前检查vector的长度吗?或者这可能是一个错误?文档说,如果vector为空,它会返回一个未定义的值。 最佳答案 doweneedtocheckthelengthofthevectorbeforecallingback()?一句话:是的。这是你的错误,你的vector

c++ - 有没有更有效的方法从流中设置 std::vector ?

目前,我设置了一个std::vector的值来自std::ostringstream如下:voidfoo(std::vector&data,std::stringstream&stream){data=std::vector(stream.str().begin(),stream.str().end());}我想知道在C++中使用STL是否有更有效的方法,或者我在这里给出的方法是否合适?使用std::stringstream会更好吗?相反? 最佳答案 正如评论中所指出的,由于对str()的两次调用,您的代码不正确。为了提高效率,您可

c++ - 我怎样才能将原始数组的 memcpy 等效于 std::vector?

我有一个类(除其他外)有一个指向unsignedchar的指针,该指针被删除并重新分配以存储来自另一个数组的一些数据。这是用一个函数完成的classMyClass{private:unsignedchar*m_Buffer;intm_BufferSize;public:boolSetBuffer(intiSize,constunsignedchar*pArray);};boolMyClass::SetBuffer(intiSize,constunsignedchar*pArray){boolbOK=false;if(pArray!=NULL&&iSize>0){delete[]m_Bu

c++ - 单例模式和 std::unique_ptr

std::unique_ptr唯一地控制它指向的对象,因此不使用引用计数。单例确保只能使用引用计数创建一个对象。std::unique_ptr会和单例一样执行吗? 最佳答案 单例确保一种类型只有一个实例。unique_ptr确保只有一个智能指针指向任何实例。 关于c++-单例模式和std::unique_ptr,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/15906509/

c++ - 按元素添加两个范围的惯用且有效的方法

是否有任何高效且惯用的方法来执行以下操作?std::vectora={1,2,3,4};std::vectorb={5,6,7,8};for(std::size_ti=0;i我试图避免使用方括号/索引符号,并且只使用迭代器,以便操作可以与任何具有前向迭代器的容器一起使用。我想到了以下解决方案:std::vectora={1,2,3,4};std::vectorb={5,6,7,8};std::transform(a.begin(),a.end(),b.begin(),a.begin(),std::plus());但是,a.begin()存在冗余,我只能使用+而不是+=。标准库中是否有一

c++ - 互斥锁映射c++11

我需要制作一个线程安全的映射,我的意思是每个值都必须独立互斥。例如,我需要能够同时从2个不同的线程获取map["abc"]和map["vf"]。我的想法是制作两个映射:一个用于数据,一个用于每个键的互斥锁:classcache{private:....std::mapmainCache;std::map>mutexCache;std::mutexgMutex;.....public:std::stringget(std::stringkey);};std::stringcache::get(std::stringkey){std::mutex*m;gMutex.lock();if(mu

c++ - 复制赋值运算符应该作为一般规则利用 std::swap 吗?

总是使用std::swap来实现我的复制赋值运算符是一个很好的通用做法吗?我的理解是,这提供了一种共享复制构造函数实现的方法。我想避免复制实际的复制逻辑本身。所以这就是我要做的:classFoo{public:Foo(Fooconst&other){/*assumevalidimplementation*/}Foo&operator=(Fooother){std::swap(*this,other);return*this;}};将“other”传递给赋值运算符的行为执行复制构造(此时我们已经共享了复制逻辑)。我假设交换将调用移动构造(这里有一个编译器生成的实现)。我几乎对每个实现复制

c++ - 有没有办法将零分配给 std::chrono::nanoseconds

有没有办法将零分配给std::chrono::nanoseconds类型的持续时间?我尝试了duration::zero但失败了。 最佳答案 有一个zero()功能:std::chrono::nanosecondsdur;//...dur=std::chrono::nanoseconds::zero();或者您可以将它分配给一个nanoseconds类型的临时变量,它是用0显式构造的:dur=std::chrono::nanoseconds{0};这也是zero()返回的内容。最后,如果您使用的是支持它的编译器,则只有://requ

c++ - undefined reference `pthread_create' 使用 ASIO 和 std::thread 制作 C++11 应用程序时出错

我设置了Eclipse(实际上是XilinxSDK,但基于Eclipse)和g++4.9.2来编译一个使用独立ASIO的项目,我在属性->C/C++中使用了-std=c++11Build->Settings->ToolSettings->Otherflags以便它可以使用所有C++11特性进行编译。我还在C/C++GeneralSymbols中设置了ASIO_HAS_STD_THREAD,ASIO_STANDALONE等等,我希望ASIO头文件会使用std::thread而不是线程。但是,我仍然看到来自make的错误:undefinedreferencetopthread_create