草庐IT

c++ - c++ 中汉明距离的更快形式(可能利用标准库)?

我有两个intvectors像a[100],b[100].计算它们的汉明距离的简单方法是:std::vectora(100);std::vectorb(100);doubledist=0;for(inti=0;i我想问一下,在C++中有没有更快的方法来完成这个计算,或者如何使用STL来完成同样的工作? 最佳答案 您要求更快的方法。这是embarrassinglyparallelproblem,因此,对于C++,您可以通过两种方式利用它:线程并行性和通过优化进行矢量化。//Thefollowingflagsallowcpuspecif

c++ - <cstdint> 与 std::size_t 类型

从我对boost的窥视中和libstdc++,库通常使用std::size_t和std::ssize_t每当事先不知道无符号/有符号索引的上限/下限时。我的问题是:为什么不使用uintmax_t来自而不是std::size_t和intmax_t而不是std::ssize_t? 最佳答案 前者是C++标准的一部分,后者不是。更准确地说,cstdintheader是最近才引入的(在C++11中)。这是因为stdint.h本身是C99的一部分,比C++98更新。 关于c++-与std::siz

c++ - std::list 是否保证项目永远不会移动到不同的内存位置?

这个问题在这里已经有了答案:IteratorinvalidationrulesforC++containers(6个答案)关闭8年前。是否保证一旦std::list或std::forward_list项被分配,它将保留在相同的内存位置(地址)直到被销毁?当然,复制列表本身除外。

vector 中某些元素的 C++ 迭代器

如果这是一个微不足道的问题,请原谅我,我只是在学习C++并尝试围绕某些概念进行思考。尤其是涉及到迭代器时,我完全迷路了。假设我有一个表示某种数据结构的自定义类,它的成员之一是一个整数vector。我想为该类编写一个双向迭代器,它只输出vector中的偶数。有没有一种简单而有指导意义的方法?我不想使用STL以外的库。 最佳答案 不确定制作自己的迭代器是否容易。但可能最好的方法是使用有条件的for_each函数。std::for_each对每个元素进行操作。创建一个对某些特定元素执行操作的for_each_if非常容易。例如,下面的程序

C++ - shared_ptr<vector<T>> 与 vector<shared_ptr<T>>

我看到很多人使用vector>的案例.您何时以及为何使用shared_ptr>反而?对我来说,后者似乎在性能和内存使用方面都更有效率。在整个应用程序中共享单个对象vector是否错误?谢谢 最佳答案 此用途:vector>将允许您传递T类型的实例从这个vector到代码的其他部分,不用担心它们不会被释放。即使您的vector将不再存在。shared_ptr>另一方面只保护vector,其元素类型为T没有针对内存泄漏的保护。我在这里假设T是指针类型,如果T是非指针,那么你当然不会在这里造成内存泄漏的问题。好吧,有人可以制作T=shar

C++ 将流操纵器复制到其他流

想象一个std::ostream&operator想用数字做一些事情。为此,有人可能想使用std::hex,其他一些人可能不想使用任何操纵器,无论如何,任何操纵器都是可能的。我如何将它们复制到另一个std::ostream没有ostream的文本内容作为参数通过?我只需要操纵器。所以我想要那个std::cout,其中someCoolClass可能看起来像structsomeCoolClass{someCoolClass(inti):_i(i){}friendstd::ostream&operator打印a.我知道这个例子是无用的,尤其是将整数转换为字符串的其他流似乎是无用的,但让我们想

c++ - 如何将标准生成器传递给 STL 函数?

#include#include#includeintmain(){std::vectora={1,2,3};std::mt19937generator;std::random_shuffle(a.begin(),a.end(),generator);}我正在尝试使用g++-std=c++0x编译此代码,收到以结尾的巨大编译器转储/usr/include/c++/4.9.2/bits/random.h:546:7:note:candidateexpects0arguments,1provided有什么正确的方法吗? 最佳答案 std

c++ - 有没有办法防止在 STL unordered_map 上插入或删除?

我经常使用带有固定/常量键但可变值的unordered_maps。示例:如果您有一个enumDimension{X,Y},您可能希望为每个存储一个数据点,但不允许对map进行插入或删除。更新正常。初始化示例:typedefstd::unordered_mapDimension_To_Size_Map;//assumestd::hashhastemplatespecialisationforenumDimension_To_Size_Mapdimension_To_Size_Map={{Dimension.X,0},{Dimension.Y,0}};dimension_To_Size_M

c++ - 显示 STL 数据时缺少面孔

我为ASCIISTL格式编写了一个简单的解析器。当我尝试使用提供的法线渲染三角形时,生成的对象缺少许多面:它应该是这样的:我已经尝试过的:明确禁用背面剔除(尽管之前不应该启用)确保启用了深度缓冲区这是一个重现错误的最小示例程序:#include#include#include#includeintmain(intargc,char**argv){SDL_Init(SDL_INIT_VIDEO);intscreen_w=1280,screen_h=720;SDL_Window*win=SDL_CreateWindow("test",20,20,screen_w,screen_h,SDL_

c++ - 现有的标准仿函数/函数来检查是否等于 0?

我想计算无符号长整数vector中0的数量。是否存在要传递给std::count_if的现有标准函数/仿函数?还是像这个例子一样自己写?classis_equal{private:unsignedlongintv;public:is_equal(unsignedlongintvalue):v(value){}booloperator()(unsignedlongintx){returnx==this->v;}};unsignedlongintcount_zero(conststd::vector&data){returnstd::count_if(data.begin(),data.e