草庐IT

c++ - 如何使用 range-v3 库从 std::vector 获取列 View 和行 View ?

将7x5矩阵展平为std::vector,我想使用EricNiebler的range-v3库查看列和行。到目前为止,我设法(有改进的余地)获得单行、单列和连接行的View。参见:https://wandbox.org/permlink/8o4RgSucF3zSNuPNstd::vectornumbers={00,01,02,03,04,10,11,12,13,14,20,21,22,23,24,30,31,32,33,34,40,41,42,43,44,50,51,52,53,54,60,61,62,63,64,};constsize_tn=5;//numberofcolumns//R

c++ - 将 size_t 转换为 int 以声明 char 数组的大小

我正在尝试声明一个char数组的大小,我需要使用声明为size_t的变量的值来声明该大小。无论如何我可以将size_t变量转换为int以便我可以这样做吗? 最佳答案 size_t是一个整数类型,不需要转换。在C++中,如果您想拥有一个动态大小数组,您需要使用new来使用动态分配。也就是说,您不能使用:std::size_tsz=42;charcarray[sz];您需要改用以下内容:std::size_tsz=42;char*carray=newchar[sz];//...andlater,whenyouaredonewiththe

c++ - 在 C++ 中模拟 C# 索引器

如您所知,在C#类中,我们可以定义具有多个参数的索引器。但在C++中,运算符[]可以接受一个参数。有没有一种方法可以使用多个参数在C++中编写索引器?C#中的索引器:publicAnyTypethis[arg1,arg2,.....]{get{...};set{...};}[]C++运算符:AnyType&operator[](arg){//ourcode} 最佳答案 您可以返回一个临时文件,它包含第一个索引并引用数据源。private:classBoundArg{private:Data&data;size_ti;public:B

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::vector,或任何其他序列容器(有时是双端队列),它存储uint64_t元素。现在,让我们将此vector视为size()*64的序列连续位。我需要找到由给定[begin,end)中的位组成的单词范围,鉴于end-begin所以它适合一个词。我现在的解决方案是找到其部分将构成结果的两个词,并将它们分别屏蔽和组合。因为我需要它尽可能高效,所以我尝试在没有任何if的情况下编写所有代码。分支不会导致分支预测错误,因此例如,当整个范围适合一个词或跨越两个词时,代码在两种情况下都有效,而不采用不同的路径。为此,我需要对这些shiftl进行编码和shiftr函数,除了将单

c++ - 通过来自任意索引的参数包初始化 std::array

通过可变模板参数初始化一个std::array,从给定的索引开始可以通过以下方式完成:#includetemplatestructA{templateA(size_ti,Ts...vals){constexprsize_tP=sizeof...(vals);std::arraytemp{vals...};for(size_tj=0;jarr;};但是否可以在不将参数包转换为临时元组或另一个std::array的情况下实现相同的目的? 最佳答案 您可以使用std::index_sequence和委托(delegate)构造函数:tem

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++ - 在移出 vector 上调用 size() 方法是否安全?

这个问题在这里已经有了答案:Whatconstitutesavalidstatefora"movedfrom"objectinC++11?(2个答案)关闭3年前。标准指定STL容器在beginmoved之后(在这种情况下我们谈论启用move构造/赋值的std::move),在有效,但未指定状态。我相信这意味着我们只能应用不需要先决条件的操作。我记得这里有人在Stackoverflow上声称这是真的,经过一番检查后我同意了。不幸的是,我不记得我检查过哪些来源。此外,我无法在标准中找到相关信息。来自[container.requirements.general/4],table62([ta

c++ - std::size 和 std::map 的最大大小?

std::size和std::map的最大大小是多少?有没有办法增加这个数字?谢谢! 最佳答案 您可以通过调用Container::max_size()获得每个标准库容器的最大大小在上面。如果在编译时需要理论最大大小值,请使用std::numeric_limits::max(). 关于c++-std::size和std::map的最大大小?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questi

c++ - MSVC : what compiler switches affect the size of structs?

我有两个单独编译的DLL,一个是从VisualStudio2008编译的,一个是从matlab编译的mex文件。两个DLL都包含一个头文件。当我在一个DLL中采用sizeof()结构时,它返回48,而在另一个DLL中它返回64。我检查了/Zp开关,在两个编译中它都设置为/Zp8。还有哪些其他编译器开关可能会影响结构的大小?该结构是一个简单的POCO,没有继承,也没有虚函数。编辑结构看起来像这样:classLIBSPECSGeometry{public:std::vectorm_i;uintN;uintn_im,n_s;};在调试中,sizeof()在两种情况下都返回56,在发行版中,在