标签: std

C++标准库串口(​​UART)接口

我想在c ++中从/向串口读/写数据,但我希望我的代码尽可能便携.我目前正在开发一个窗口环境并且只使用std函数(windows.h从未#include'ed).是否有任何便携式,正确的(即不是#ifdef,而不是提升)方式来连接串口?

假设上面的答案是否定的,是否有任何可以执行此(基本)任务的可用程序包?

谢谢

c++ std

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

C++ std :: sort() - 无法对访问成员变量的类类型的向量进行排序

Entry.h:

//returns the sum of all non mega entry percentages
float sumOfNonMegaEntryPct(vector<Number>& arg1_Numbers);
Run Code Online (Sandbox Code Playgroud)

Entry.cpp:

//returns the sum of all mega entry percentages
float Entry::sumOfMegaEntryPct(vector<MegaNumber>& arg1_MegaNumbers)
{
    float sumPct = 0.00f;
     for (MegaNumber c : megaEntry)
     {
         sumPct = sumPct + arg1_MegaNumbers[c.getID()].getOccurencePct();
     }

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

Lotto.h:

public:
//compares two entries, used for sorting algorithm, sorts by nonmega number
bool compareEntry_sumPct_nonMega(Entry arg1, Entry arg2); 

    protected:
    vector<Numbers> numbers;
    vector<MegaNumbers> megaNumbers;
Run Code Online (Sandbox Code Playgroud)

Lotto.cpp:

#include "lotto.h"

//sorts nonmega numbers by sum …
Run Code Online (Sandbox Code Playgroud)

c++ sorting class function std

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

C语言中C++标准11实现的std :: move函数

我们都知道在C++标准11中实现的std :: move函数的强大功能,它将特定范围内的元素移动到新范围.

我想知道我是否可以在纯C代码中开发这样的功能.我的代码是用C语言编写的,我希望有类似于C++的std :: move函数,我可以在不使用临时缓冲区的情况下将整数元素的范围移动到新的范围内.

c c++ std c++11

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

如何使用正则表达式删除std :: wstring中特定短语的所有实例?

我试图遵循这个答案:https://stackoverflow.com/a/32435076/5484426,但对于std :: wstring.到目前为止,我有这个:

std::wstring str = L"hello hi hello hi hello hi";
std::wregex remove = L"hi";
Run Code Online (Sandbox Code Playgroud)

现在我想这样做:regex_replace(str,remove,""); 虽然看起来regex_replace不适用于wstring.如何删除此字符串的所有实例?

c++ regex string replace std

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

什么可以使std :: map找不到它的一个键?

我有一个std :: map将const char*键与int值相关联:

std::map<const char*, int> myMap;
Run Code Online (Sandbox Code Playgroud)

我用三个键初始化它,然后检查它是否可以找到它:

myMap["zero"] = 0;
myMap["first"] = 1;
myMap["second"] = 2;

if (myMap.at("zero") != 0)
{
    std::cerr << "We have a problem here..." << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

什么都没打印出来.从这里,一切看起来都不错.

但是后来在我的代码中,没有对此地图进行任何更改,我尝试再次找到一个键:

int value = myMap.at("zero");
Run Code Online (Sandbox Code Playgroud)

但该at函数抛出std::out_of_range异常,这意味着它无法找到该元素.myMap.find("zero")认为是一样的,因为它在地图的末尾返回一个迭代器.


但最棘手的部分是关键是真的在地图中,如果在调用at函数之前,我打印地图的内容如下:

for (auto it = myMap.begin(); it != myMap.end(); it++)
{
    std::cout << (*it).first << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

输出如预期:


第一


怎么可能呢?我不使用任何beta测试库或任何应该不稳定的东西.

c++ dictionary std c++11

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

如果出现平局,如何使minmax_element返回索引最少的元素

#include<utility>
#include<alogrithm>
#include<iostream>
using namespace std;
int main(void)
{
  int n=5;
  int s[]={3,5,1,5,5};
  auto r=minmax_element(s,s+n);
  cout<<r.second-s<<endl;
  cout<<*r.second;
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

这是使用索引打印数组中最大元素的代码.我想要索引最小的最大元素(如果是平局,则为第一个最大值)

如何修改上面的代码以获得结果.

c++ std stl-algorithm c++14

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

使用isalpha函数时不需要std命名空间

我是C++的初学者.据我所知,为了使用名称,我们必须包含由该名称组成的库.此后,我们可以预先添加命名空间的名称或使用using关键字.

例如

不使用关键字:

std::cout << "Hello Word!" << std::endl;
Run Code Online (Sandbox Code Playgroud)

使用关键字:

using namespace std;
cout << "Hello World!" << endl;
Run Code Online (Sandbox Code Playgroud)

我在网上看到了一个使用isalpha名称空间中locale库名称的在线代码示例std.但是,该样本不使用上述任何方法.

例如

#include <iostream>
#include <locale>
int main() {
  std::cout << isalpha('a') << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

有人可以向我解释为什么代码仍然有效吗?

c++ namespaces using std

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

转换谓词通过引用返回局部变量

在下面的代码中,我试图将a复制std::vector<char>到一个std::vector<uint8_t>.为了避免编译器警告,我在谓词中进行显式转换,std::transform而不是std::copy像这样使用

std::vector<char> buf(10, 10);
std::vector<uint8_t> u(10);
std::transform(std::begin(buf), std::end(buf), std::begin(u),                                 
     [](uint8_t val)->decltype(*std::begin(u)){                                            
     return static_cast<decltype (*std::begin(u))> (val);                              
     });    
Run Code Online (Sandbox Code Playgroud)

对于这段代码,我得到编译器警告说我试图val通过引用返回一个局部变量.

为什么这样,它如何解决?

c++ lambda stl std c++11

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

Abs和使用命名空间std

假设我正在使用using namespace std(不可否认的不良做法)并且我abs在我的代码中使用该函数(以获得重载的绝对函数).具体来说,我的MWE是:

#include <cmath>
#include <iostream>
#include <stdlib.h>

using namespace std; 

int main(int argc, char* argv[]) {

 double f(-0.4);
 std::cout<<"abs(f) = "<<abs(f)<<std::endl;

}
Run Code Online (Sandbox Code Playgroud)

如果我注释掉该using namespace std;行,则输出为

abs(f) = 0
Run Code Online (Sandbox Code Playgroud)

否则输出是

abs(f) = 0.4
Run Code Online (Sandbox Code Playgroud)

我不明白的是,在后一种情况下如何调用"正确的"abs函数,因为即使stdlib.h有一个abs只返回int's'的函数.

事实上,这个问题的第二个答案是使用using namespace std;可能还不够.这是真的?我的MWE似乎与此相矛盾.

我在Linux上使用gcc-4.8,这可能是解决依赖关系最有问题的组合.

c++ namespaces std absolute-value

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

在头文件中使用std

是否有任何选项在头文件中使用std而不使用任何#include语句?我在头文件中有一个类如下;

class Sequence{
private:
    std::string sequence;
    unsigned length;
public:
    /* Constructors */
    Sequence (void);
    Sequence (std::string, unsigned);
    Sequence (const Sequence &);

    /* Destructor Definition */
    ~Sequence(){}

    /* Overloaded Assignment */
    Sequence & operator
        = (const Sequence &seq)
    {
        sequence = seq.sequence;
        length = seq.length;
        return *this;
    }

    /* Setter and Getter Functions */
    void setSequence(std::string);
    void setLength(unsigned);
    std::string getSequence(void);
    int getLength(void);
};
Run Code Online (Sandbox Code Playgroud)

如果不包含iostream,则无法正确编译.但是,我在相关问题中阅读了一些注释,其中我们不应在头文件中包含库和另一个头文件.所以?

c++ iostream std header-files

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