标签: c++-standard-library

std :: minmax initializer_list <T>参数

也许这个问题有点理论,但我不知道什么是落后定义设计激励std::minmax这样的

template <class T>
pair<T,T> minmax (initializer_list<T> il);
Run Code Online (Sandbox Code Playgroud)

这意味着,IMO(传递的对象)li将被复制,其每个成员也必须是可复制构造的.

虽然,std::min_element(或者就此而言std::max_element)在某种意义上更加"有效",但只传递容器迭代器(不需要实际复制整个容器)

template <class ForwardIterator>
ForwardIterator min_element (ForwardIterator first, ForwardIterator last);
Run Code Online (Sandbox Code Playgroud)

编辑 - 基于Joachim Pileborg评论,initializer_list<T>对象没有被复制,所以我正在查明我的问题 - 为什么std::minmax被约束到这样的对象而不是任意容器(具有"非const"性质,可以这么说)

c++ std c++-standard-library minmax c++11

0
推荐指数
1
解决办法
162
查看次数

使用 std::multimap 是否可以保证 begin() 方法返回最新元素?

我是 C++ 的新手。我想知道:std::multimap(C++11)集合的迭代器中是否有一些插入时间保留?

我认为,因为它是由任意值索引的,所以不能保证迭代器中元素的排序保留插入时间,但我正在处理一些做出不同假设的代码,即返回的元素begin()是相关的到广告订单。

c++ iterator multimap c++-standard-library c++11

0
推荐指数
1
解决办法
222
查看次数

我们可以使用std :: array的常规指针算法吗?

我想弄清楚如何在指向std :: array类的元素的指针上使用旧样式指针算法.以下代码(不出所料)可能无法编译:

int main(int argc, char *argv[])
{
    double* data1 = new double[(int)std::pow(2,20)];
    std::cout << *data1 << " " << *(data1 +1) << std::endl;
    delete data1;
    data1 = NULL;

    double* data2 = new std::array<double, (int)std::pow(2,20)>;
    std::cout << *data2 << " " << *(data2 +1) << std::endl;
    delete data2;
    data2 = NULL;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

作为练习,我想用所有的常规指针算法,但不是在一个老式双阵列指点,我希望它指向一个std ::数组的元素.我用这条线思考:

    double* data2 = new std::array<double, (int)std::pow(2,20)>;
Run Code Online (Sandbox Code Playgroud)

是指示编译器data2是指向分配的堆的第一个元素的指针std::array<double,(int)std::pow(2,20)>.

我被教导的double* name = new double[size];装置EXACTLY以下:«栈指针分配内存以一个双键并命名指针name,然后堆分配大小的double数组size,然后设置指针以指向该阵列的第一个元素. »由于上面的代码没有编译,我必须教一些不正确的东西,因为相同的语法对std …

c++ arrays c++-standard-library c++11

0
推荐指数
1
解决办法
436
查看次数

易失性标准模板对象的使用方法

我现在有一些代码希望在Teensy 3.6微控制器上的基于计时器的中断中运行。该代码访问类的[global]对象数组。我已经将该数组和所有成员变量标记为volatile,我认为这是正确处理中断的第一步。

我标记为volatile的成员变量之一是std :: bitset,我想称其为非易失性方法,我不能这样做

"passing 'volatile std::bitset<16u>' as 'this' argument discards qualifiers [-fpermissive]"
Run Code Online (Sandbox Code Playgroud)

我想我可以复制位集库并将所有内容切换为volatile,但是我认为这不是必需的,所以我认为有更好的解决方案,或者我在错误地考虑问题。

请让我知道应该怎么做。

这些答案似乎建议在ISR和多线程程序中访问ISR中的全局变量时使用volatile: C'Volatile'关键字?

为什么在C中需要使用volatile?

在中断例程中使用C ++对象(和volatile)的正确方法是什么?

当仅在中断期间读取变量时需要挥发

微控制器编程中ISR功能中的易失性关键字用法

这是许多建议使用的外部资源的补充。也许我的原始信息不清楚,或者我的情况与此不同。

c++ arduino interrupt volatile c++-standard-library

0
推荐指数
1
解决办法
92
查看次数

remove_if 不需要移动和复制语义

这是一个典型的向量删除-擦除操作的样子:

auto toErase = std::remove_if(vec.begin(), vec.end(),
   [val](obj_t const& obj) { return obj.myval == val; }
); // This actually moves objects around !

vec.erase(toErase, vec.end()); 
Run Code Online (Sandbox Code Playgroud)

这在大多数情况下都可以正常工作,但我遇到了obj_t类型不允许移动或复制语义的情况。对象是用 插入的vec.emplace_back(),我正在寻找一种remove_if不需要复制或移动的替代方法。

它是否已经存在于某处?如果没有,它将如何建造?

c++ algorithm vector c++-standard-library move-semantics

0
推荐指数
1
解决办法
191
查看次数

'unit'-ratio 方便 typedef 在哪里?

std::ratio 为度量前缀(centi、deci、deca、hecto)提供方便的 typedef。

yocto   std::ratio<1, 1000000000000000000000000>, if std::intmax_t can represent the denominator
zepto   std::ratio<1, 1000000000000000000000>, if std::intmax_t can represent the denominator
atto    std::ratio<1, 1000000000000000000>
femto   std::ratio<1, 1000000000000000>
pico    std::ratio<1, 1000000000000>
nano    std::ratio<1, 1000000000>
micro   std::ratio<1, 1000000>
milli   std::ratio<1, 1000>
centi   std::ratio<1, 100>
deci    std::ratio<1, 10>
deca    std::ratio<10, 1>
hecto   std::ratio<100, 1>
kilo    std::ratio<1000, 1>
mega    std::ratio<1000000, 1>
giga    std::ratio<1000000000, 1>
tera    std::ratio<1000000000000, 1>
peta    std::ratio<1000000000000000, 1>
exa     std::ratio<1000000000000000000, 1>
zetta   std::ratio<1000000000000000000000, 1>, if std::intmax_t can represent the numerator
yotta   std::ratio<1000000000000000000000000, …
Run Code Online (Sandbox Code Playgroud)

c++ numeric c++-standard-library

0
推荐指数
1
解决办法
70
查看次数

为什么这个boost :: container :: string&std :: string比较不按预期工作?

假设你有一个std :: string和一个boost :: container :: string就像这样:

std::string                stdString     =   "This is a test";
boost::container::string   boostString   =   "This is a test";
Run Code Online (Sandbox Code Playgroud)

假设你想比较他们的内容; 以下是不可能的,因为我们无法比较他们的类型:

stdString == boostString                 // no operator "==" matches these operands
Run Code Online (Sandbox Code Playgroud)

然后,您可以选择使用它们的两种方法.c_str()从每个字符串中获取char*.不确定这是否有效地比较字符串,你试试:

stdString.c_str() == boostString.c_str() // compiles, but comparison returns false
Run Code Online (Sandbox Code Playgroud)

然后尝试仅使用std :: string中的c_str()方法:

stdString.c_str() == boostString         // compiles, and comparison seems fine
Run Code Online (Sandbox Code Playgroud)

你出于好奇而尝试相反,它也有效:

stdString == boostString.c_str()         // compiles, and comparison seems fine
Run Code Online (Sandbox Code Playgroud)

所以问题是,为什么这两个后面的比较似乎在第一个没有时正常工作?

奖金问题:这是比较这些字符串内容的不可靠方式吗?

完整代码示例:

#include <boost/container/string.hpp>
#include <iostream>

int main(int argc, char *argv[])
{
  std::string stdString …
Run Code Online (Sandbox Code Playgroud)

c++ string boost string-comparison c++-standard-library

-1
推荐指数
1
解决办法
167
查看次数

C++ STL 排序检查 NaN 吗?

我正在使用犰狳库中的排序函数,但它不断触发 NaN 错误,当我手动检查时,这些错误并不存在......所以我切换到 STL 排序函数并且它起作用了!所以我的好奇心是,STL 排序函数如何处理 NaN?

c++ c++-standard-library c++11 rcpparmadillo

-1
推荐指数
1
解决办法
163
查看次数

<utility>头文件是否存在于C++ 11之前的版本中?

Ç++的早期版本中定义std::swap<algorithm>头,但现在它已经搬到了<utility>.我很确定后一个头文件存在于以前版本的标准中,但我真的很感激确认!

c++ c++-standard-library

-2
推荐指数
1
解决办法
183
查看次数

为什么 &lt;bits/stdc++.h&gt; 中有一个“.h”扩展名?

(据我所知)C++ 不接受头文件上的“.h”扩展名(因为它通常不存在于其他包含语句中)所以包含如何<bits/stdc++.h>在 C++ 中工作以及为什么它有“.h”延期?

c++ header-files c++-standard-library

-2
推荐指数
1
解决办法
223
查看次数

为什么几乎所有的C++标准库都不可移植(包括clang,gcc和vc ++)?

我没能用VC++编译gcc的C++标准库,反之亦然.

为什么几乎所有的C++标准库都不可移植(包括clang,gcc和vc ++)?

我也尝试过STLport,但它太旧了,无法支持C++ 11.

我正在为嵌入式系统编写自己的mini-STL,由于其不可移植性,我无法使用编译器提供的STL.所以,我必须关心这一点.

是否有可移植C++标准库的实现?

c++ compiler-construction standards-compliance c++-standard-library c++11

-4
推荐指数
1
解决办法
300
查看次数