也许这个问题有点理论,但我不知道什么是落后定义设计激励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::multimap(C++11)集合的迭代器中是否有一些插入时间保留?
我认为,因为它是由任意值索引的,所以不能保证迭代器中元素的排序保留插入时间,但我正在处理一些做出不同假设的代码,即返回的元素begin()是相关的到广告订单。
我想弄清楚如何在指向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 …
我现在有一些代码希望在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)的正确方法是什么?,
这是许多建议使用的外部资源的补充。也许我的原始信息不清楚,或者我的情况与此不同。
这是一个典型的向量删除-擦除操作的样子:
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不需要复制或移动的替代方法。
它是否已经存在于某处?如果没有,它将如何建造?
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) 假设你有一个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) 我正在使用犰狳库中的排序函数,但它不断触发 NaN 错误,当我手动检查时,这些错误并不存在......所以我切换到 STL 排序函数并且它起作用了!所以我的好奇心是,STL 排序函数如何处理 NaN?
Ç++的早期版本中定义std::swap的<algorithm>头,但现在它已经搬到了<utility>.我很确定后一个头文件存在于以前版本的标准中,但我真的很感激确认!
(据我所知)C++ 不接受头文件上的“.h”扩展名(因为它通常不存在于其他包含语句中)所以包含如何<bits/stdc++.h>在 C++ 中工作以及为什么它有“.h”延期?
我没能用VC++编译gcc的C++标准库,反之亦然.
为什么几乎所有的C++标准库都不可移植(包括clang,gcc和vc ++)?
我也尝试过STLport,但它太旧了,无法支持C++ 11.
我正在为嵌入式系统编写自己的mini-STL,由于其不可移植性,我无法使用编译器提供的STL.所以,我必须关心这一点.
是否有可移植C++标准库的实现?
c++ compiler-construction standards-compliance c++-standard-library c++11