草庐IT

c++ - 将深拷贝构造函数添加到 std::unique_ptr<my_type>

我想存储一些std::unique_ptr进入std::vector.自my_type提供一个clone()制作my_type*的深拷贝非常简单.重点是如何扩展std::unique_ptr在添加复制构造函数和赋值运算符的同时保留其所有功能。遗产?模板特化?你能提供一个代码片段吗? 最佳答案 std::unique_ptr的目的是使其唯一,即它不应该是可复制的。这就是为什么他们将其设为只能移动的原因。它用于表示唯一所有权。如果你想做一个深拷贝然后让你的拷贝构造函数完成它的工作,这就是它的用途。std::unique_ptrptr1{

c++ - 在另一个 vector <string> 中定位子 vector <string>

我有一个vectorv1={"A","B","C"}.我想检查v1是否为included在vectorv2={"X","Y","A","B","C","D"}.我可以使用STL确定一个集合是否是另一个集合的子集吗??vector不应排序如果只找到子集一次,算法将停止“if(counter==v1.size()){break;}”。如果子集重复两次,你认为我应该允许它继续搜索吗?#include#include#includeusingnamespacestd;floatwordOrder(std::vectorv1,std::vectorv2){//declareavectorthat

c++ - 为什么以及如何重载 operator<< 用于打印

我写了一个实现栈的程序。我有一个显示功能。一开始我是这样写display函数的:templatevoidMystack::display(){for(inti=0;i然后开发人员建议我写一个显示功能更通用。所以我把显示函数写成:templatevoidMystack::display(std::ostream&os)const{for(inti=0;i根据我的理解,编写上述函数的好处是现在我有一个通用的显示函数,我也可以使用它来显示数据到控制台或文件。问题一:我的理解是否正确?现在另一个建议是编写如下函数:templatefriendstd::ostream&operatorconst

c++ - 为什么重载 ostream 的 operator<< 需要引用 "&"?

我一直在学习C++。Fromthispage,我知道可以通过这种方式重载ostream的“ostream&operator和friendostream&operator我的问题是……为什么这个函数需要在ostream和Object的末尾加上“&”?至少我知道“&”是用来...取一个值的地址声明一个类型的引用但是,我认为它们都不适用于上述重载。我花了很多时间在谷歌上搜索和阅读教科书,但找不到答案。任何建议将不胜感激。 最佳答案 whydoesthisfunctionneed"&"attheendofostreamandObject?因

c++ - 未在排序中使用的对上的重载运算符<

我为pair重载了小于操作,这样我就可以以特定方式对vector进行排序。我希望它根据一对中的第一个键按升序排列,如果第一个键相等,那么我希望它根据第二个键按降序排列。问题是排序函数似乎没有使用重载的运算符,但如果在2对上调用,返回的输出是我所期望的。我在下面附上了一段代码,我正在使用它进行测试:#include#include#includeusingnamespacestd;booloperator&a,pair&b){if(a.firstb.second))returntrue;returnfalse;}intmain(){vector>test{make_pair(1,10),

c++ - vector<string> 如何存储在内存中

我正在做一个项目,我绝对需要在内存中有连续的数据。我想存储一些(最多100个)字符串(我不知道每个字符串的实际大小)。因此,我将创建一个包含100个元素的字符串vector。std::vectorvect;vect.reserve(100)但是字符串可以是任意大小。那么它是怎样工作的?每次更改字符串时我的vector是否重新分配?或者std::string只是像指向字符串第一个字符的指针,就像char*用于C字符串一样? 最佳答案 每个string都是string类的一个实例,该实例将包含一个char*。vector中的string

c++ - std::is_constructible<T, Args> 是如何实现的?

这个问题在这里已经有了答案:C++98/03std::is_constructibleimplementation(4个答案)关闭5年前。到目前为止,我在网上找不到任何ELI5。对于一个学习项目,我想实现我自己的is_constructible。有人可以解释一下它是如何工作的吗?

c++ - 使用通用模板函数为 std::ostream 和 std::vector 专门化 operator<< 的最佳方法?

我遇到了标准指定的两阶段查找问题,并且由clang(正确地)实现了与operator的过载有关的问题。对于std::ostream和std::vector.考虑一个非常通用的模板函数,该函数将其参数转换为流(仅在递归时真正有用,但简单的示例足以触发问题)://generic.htemplatevoidshift(Stream&s,Arg&arg){s这个generic.h可以在整个项目中使用。然后在其他文件中,我们要输出std::vector,所以我们定义了一个重载//vector.h#include#includestd::ostream&operatorconst&v){for(a

c++ - 用 boost::shared_ptr<std::list<T>> 初始化 boost::shared_ptr<std::vector<T>>

我想初始化一个boost::shared_ptr>vec在构造函数中使用boost::shared_ptr>list初始化列表?这可能吗?我试过这个:测试.hppclassTest{public:Test(boost::shared_ptr>list);private:boost::shared_ptr>vec;};测试.cppTest::Test(boost::shared_ptr>list):vec(list->begin(),list->end()){}部分错误信息:Test.cpp:Inconstructor‘Test::Test(boost::shared_ptr>>)’:T

c++ - 将 std::vector<char*> 转换为 C 风格的参数 vector arv

我想准备一个老式的参数vector(argv)在函数中使用intexecve(constchar*filename,char*constargv[],char*constenvp[]);我用STL::vector类试过:std::stringarguments=std::string("arg1");std::vectorargv;charargument[128];strcpy(argument,arguments.c_str());argv.push_back(argument);argv.push_back('\0');//finishargvwithzero最后我将vector