草庐IT

EidosValue_Int_vector

全部标签

c++ - C++ Vector push_back() 的详细信息

我正在尝试调试一个程序,这样做与我对C++vectorpush_back()函数的理解发生了冲突。为了说明我的观点,我编写了以下短程序:#include#include#includeusingstd::cout;usingstd::endl;usingstd::vector;classTest{private:intmTestMember;public:Test(intval);Test(constTest&);intGetValue()const;};Test::Test(intval){couttests;tests.push_back(Test(int(5)));cout如果我

c++ - 在 C++ 中使用 sscanf 从字符串中提取一个 int

我的函数必须处理看起来像sayhelloy(5)或数据|x(3)|的字符串,我需要能够提取显示的整数并将其存储到一个名为address的单独int变量中。然而,一些通过的字符串将没有任何整数,对于这些字符串,地址必须默认为0。当字符串包含整数时,它总是在括号之间。我曾尝试使用sscanf,但是,作为sscanf的新手,我遇到了问题。出于某种原因,地址始终显示为0。这是我的代码:voidprocess(stringinfo){intaddress=0;//setto0incaseinfocontainsnodigitssscanf(info.c_str(),"%d",address);.

c++ - vector<unique_ptr> 的唯一拷贝

我有一个包含vector的类对象.我想要这个对象的拷贝来运行非常量函数。原始拷贝必须保持const。这样一个类的复制构造函数是什么样的?classFoo{public:Foo(constFoo&other):???{}std::vectorptrs;}; 最佳答案 您不能简单地复制std::vector因为std::unique_ptr不可复制,因此它将删除vector复制构造函数。如果您不更改存储在vector中的类型,那么您可以通过创建一个全新的vector来进行“复制”std::vector>from;//thishasthe

c++ - 为什么 Vulkan 的 VkBool32 实现为 unsigned int?

查看SaschaWillem在GitHub上托管的C++Vulkan演示,我注意到一些函数返回了数据类型VkBool32。当我注意到这条线时,我很好奇为什么Khronos没有使用普通的booltypedefuint32_tVkBool32;在vulkan.h中。uint32_t定义为typedefunsignedintuint32_t;在stdint.h中。我的问题是,如果标准Bool只需一个字节就可以完成工作,为什么丢弃3个字节有意义?我的小Recherche表明几乎没有性能差异(请参阅Whichisfaster:if(bool)orif(int)?),并且Khronos自己说他们希

c++ - 如何根据 `std::vector` 中的元素对 `std::set` 进行切片

有没有一种根据std::set中的元素对std::vector进行切片的好方法?换句话说,std::set中的元素包含我想要在vector中的索引。当然,我可以用代码完成这个:#include#include#include#includetemplatestd::vectorslice(std::vectorconst&x,std::setconst&I){autoy=std::vector();for(autoconst&i:I)y.push_back(x[i]);returny;}intmain(){autox=std::vector{1.2,2.3,3.4,4.5,5.6};a

C++ 对带有 unsigned int 的重载函数的模糊调用

这似乎不一致。我有3个函数f为签名类型short、int和longlong重载。如果您传递一个unsignedshort,那么它会被提升为下一个最大的有符号类型int。但是,如果您传递unsignedint,那么它不会被提升为有符号的longlong,这是我所期望的,编译器会提示对重载函数的调用不明确。voidf(shortx){std::printf("f(short)\n");}voidf(intx){std::printf("f(int)\n");}voidf(longlongx){std::printf("f(longlong)\n");}intmain(){f((unsign

c++ - sqrt(int_value + 0.0) -- 它有目的吗?

在我非常奇怪的C++书中做一些作业时,whichI'vebeentoldbeforetothrowaway,有一个非常奇特的代码段。我知道家庭作业总是会给你带来额外的“神秘感”,试图让你感到困惑,比如在单语句for循环之后缩进2行。但我对这个感到困惑,因为它似乎有一些实际用途。基本上是这样的:intcounter=10;...if(pow(floor(sqrt(counter+0.0)),2)==counter)...我对这部分特别感兴趣:sqrt(counter+0.0)+0.0有什么用途吗?这是穷人对替身进行静态转换的方式吗?这是否避免了一些我不使用的编译器的编译器警告?当我遗漏+

c++ - 为什么 std::is_const<const int&>::value 评估为 false?

这是问题Howtocheckifobjectisconstornot?的衍生问题.看到下面的程序我很惊讶#include#includeintmain(){std::cout::value产生了这个输出false在什么情况下可以将constint&视为非常量类型? 最佳答案 也许通过这个例子会更容易理解std::cout::value::value输出:falsetrue第一种类型是指向constint的指针,而在第二种类型中,int*本身是const。因此它的结果是true而前者是false。同样,您对constint的引用。如果

c++ - 使用 std::prev(vector.begin()) 或 std::next(vector.begin(), -1) 像 some_container.rend() 作为反向哨兵是否安全?

我写了一些采用迭代器但必须以相反顺序进行比较的代码,templateboolfunc(ConstBiIterseq_begin,ConstBiIterseq_end){ConstBiIterlast=std::prev(seq_end);while(--last!=std::prev(seq_begin))//-->Ineedtocomparethebeginningdata{......}returntrue;}在VS2013中,在Debug模式下运行时,--last!=std::prev(seq_begin)将导致调试器断言失败并显示错误消息Expression:stringite

c++ - 是否可以从 map 中的键初始化 vector ?

Howtoretrieveallkeys(orvalues)fromastd::mapandputthemintoavector?涵盖了从C++11之前的映射中的键填充std::vector的方法。有没有一种方法可以在C++11中使用lambda等来做到这一点,这意味着我们可以在一行中完成,这样我们就可以从映射中初始化vector,而不是创建一个vector并在2个Action中填充它?例如vectorv(???(m.begin(),m.end()));纯C++11是首选,但boost是可以接受的...目的是在一行中完成此操作,而不会过于复杂和“炫耀”,因此不会让其他开发人员感到困惑。