草庐IT

EidosValue_Int_vector

全部标签

c++ - 如何在类外返回枚举 vector ?

假设一个类有枚举的二维vector,我想在类之外访问这个二维vector并操纵该值。我的问题是:由于我的类型(枚举类型)在类内部,我如何声明新vector以在类外部保存按值返回?我希望像Aa(5);std::vector>x=a.get_2dvec();但这给我错误说它是私有(private)的,然后如果我将类型设为公开,我将得到未声明的错误。我知道我可以放置enums{RED,BLUE,GREEN};和typedef的颜色;在类之外并取得结果,但可以说主要在不同的文件上。//f1.cpp#include#includeclassA{//Thisenumisinsideclassenu

c++ - 在具有一个元素的列表上强制 std::vector 重载而不是 int 重载

考虑下面的代码:#include#includevoidf(std::vectorv){std::coutLiveonColiru我有点惊讶地发现在这种情况下正在拾取int重载,即程序的输出是:voidf(int)警告warning:bracesaroundscalarinitializer[-Wbraced-scalar-init]f({42});当然,只有当我将1元素列表作为参数传递时才会发生这种情况,否则std::vector正在拾取过载。为什么是{42}被视为标量而不是初始化列表?有没有办法强制编译器选择std::vector即使在1元素列表上也会重载(没有明确构造std::v

c++ - `size_t` 总是 `vector<int>::size_type` 或任何其他容器类型的别名吗?

让我们举一个最简单的例子:公式1:std::vectorvec;//add10E11elementsfor(std::size_tn=0;n公式2:std::vectorvec;//add10E11elementsfor(std::vector::size_typen=0;n当然,unsignedint或任何不合适的数据类型在这里都不起作用,我们必须编译x64。我的问题是:在任何情况下,第一个公式是否会导致问题,或者我们是否可以安全地始终以这种更短的表示法来编写它?如果它们很容易覆盖(x86、任何其他容器、size_type的其他应用程序),我也会对类似的设置感兴趣。

c++ - std::copy_n 不改变目标 vector 大小

如果我为vector保留一些空间,然后使用std::copy_n()在其中复制一些值,我会正确复制并访问这些值,但是vector的大小仍然为零。这是预期的行为吗?我是否应该改为调整vector的大小,即使它效率不高?#include#include#includeintmain(){std::vectorsrc,dest;for(doublex=0.0;x测试的编译器:clang、gcc、VisualC++ 最佳答案 butthesizeofthevectorisstillzerostd::copy_n不会改变容器的大小,只是复制值

c++ - vector 中的无效迭代器

我知道擦​​除会使删除点和删除点之后的迭代器失效。考虑:std::vectorvec={1,2,3,4,5};std::vector::iteratorit=vec.end()-1;//lastelementvec.erase(vec.begin());//shifteverythingonetotheleft,'it'shouldbethenew'end()'?std::cout比较(不是取消引用)无效的迭代器(在本例中为it)是否是未定义的行为?如果不是,it==vec.end()是否保证成立?编辑:如果只有它是一个奇异值,从最上面的答案看来这是UB。但是来自Whatissingu

c++ - 用作堆栈的 std::vector 和 std::stack 之间是否存在任何复杂性差异?

如标题所问,用作堆栈的std::vector与std::stack之间是否存在时间或空间差异? 最佳答案 std::stack包装另一个容器。如果堆栈的后备容器是std::vector,则没有,没有区别。然而,默认的后备容器是一个std::deque,它可以有不同的存储和计时行为参见std::stack详情 关于c++-用作堆栈的std::vector和std::stack之间是否存在任何复杂性差异?,我们在StackOverflow上找到一个类似的问题: h

c++ - char_traits<char16_t>::int_type 的大小不够大吗?

考虑以下程序:#include#include#includeintmain(int,char**){std::basic_stringstreamstream;stream.put(u'\u0100');std::cout输出是:Bad:0Bad:0Bad:1设置badbit的原因似乎是因为如果字符等于std::char_traits::eof(),'put'设置badbit。我现在不能再投入流中了。在http://en.cppreference.com/w/cpp/string/char_traits它指出:int_type:anintegertypethatcanholdallv

c++ - 获取指向 vector 元素的指针

这个问题在这里已经有了答案:Doesinsertionofelementsinavectordamagesapointertothevector?(6个答案)doesapointertoanelementofavectorremainafteraddingtoorremovingfromthevector(inc++)(1个回答)关闭5年前。我遇到了一个我不太明白的问题:我正在用创建一个对象Edgeedge_vec1.push_back(Edge(src,dest));然后我想在一个单独的vector中保留一个指向这条边的指针:edge_vec2.push_back(&edge_vec

c++ - 为什么我不能使用与 'const int*' 相同的 'const char*' 创建一个 int 数组?

为什么我可以用这种方式创建一个字符串或字符数组:#includeintmain(){constchar*string="Hello,World!";std::cout?并且它正确输出第二个元素,而如果没有数组的下标符号[]我就不能创建整数类型的数组?char的一个和这个有什么区别:constint*intArray={3,54,12,53};。 最佳答案 “为什么”是:“因为字符串文字很特殊”。字符串文字存储在二进制文件中,作为程序本身的常量部分,constchar*string="Hello,World!";只是将文字视为存储在别

c++ - 无法将类型 'int&' 的非常量左值引用绑定(bind)到类型 'int' 的右值

以下代码编译失败:#includeusingnamespacestd;intadd2(constint&x){returnx+2;}templateTadd2T(T&&x){returnadd2(std::forward(x));}intmain(intargc,char**argv){intx=0;cout通过这条消息:main.cpp:Ininstantiationof'Tadd2T(T&&)[withT=int&]':main.cpp:26:20:requiredfromheremain.cpp:12:16:error:cannotbindnon-constlvaluerefer