是否有内置的Delphi函数可以将诸如'3,232.00'之类的字符串转换为float?由于逗号,StrToFloat引发异常.或者是首先删除逗号然后执行StrToFloat的唯一方法?
谢谢.
说我有这个代码:
#include <iostream>
#include <vector>
int main()
{
std::vector<int> vec {10, 15, 20};
auto itr = vec.begin();
vec.erase(itr);
for(const auto& element : vec)
{
std::cout << element << " ";
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这给了我15 20预期的效果.现在,cppreference说这约erase():
在擦除点或之后使迭代器和引用无效,包括end()迭代器
很公平,但这是标准给出的唯一保证vector::erase()吗?
是否允许在擦除的迭代器之后重新排序它的元素?
例如,这些条件是否保证在擦除后保持,这意味着erase()迭代器之后的所有元素都向左移1:
vec[0] == 15
vec[1] == 20
Run Code Online (Sandbox Code Playgroud)
或者允许实现在他们认为合适的情况下移动值,从而创建场景vec[0] == 20等等?
我想引用标准的相关部分.
我想用C++格式化价格
我可以使用,std::put_money但问题是我的数字格式区域设置与我的货币区域设置不同.
假设我想用法语格式化GBP的价格,如果我将语言环境设置为法语,我会得到一个欧元符号.我需要用户区域设置中的小数和价格区域设置中的货币.
我可以在Java中使用NumberFormat来自十进制语言环境,然后设置我想要的货币.
这可以用C++完成吗?
我正在使用USB蓝牙适配器在我的Raspberry Pi上使用BlueZ进行编程.我需要能够以编程方式连接到Arduino BT,问题是Arduino的蓝牙模块仍在使用传统配对,因此每当我尝试打开设备的套接字时,我都会得到一个Permission Denied.如何通过BlueZ发送PIN码来完成配对请求?
我在这做错了什么?我只是想将格式化的字符串转换为double,并使用传入的TFormatSettings作为StrToFloat的参数.我得到以下异常:
'3,332.1' is not a valid floating point value.
Run Code Online (Sandbox Code Playgroud)
千位分隔符和小数分隔符是TFormatSettings中的预期值(','和'.').
procedure TForm2.Button1Click(Sender: TObject);
var
FS: TFormatSettings;
S: String;
V: double;
begin
FS:= TFormatSettings.Create;
codesite.Send('ThousandSeparator', FS.ThousandSeparator); //correct ','
codesite.Send('DecimalSeparator', FS.DecimalSeparator); //correct '.'
S := '3,332.1';
try
V := StrToFloat(S, FS);
except on E: Exception do
ShowMessage(e.Message);
end;
CodeSite.Send('S', S);
CodeSite.Send('V', V);
end;
Run Code Online (Sandbox Code Playgroud) Jon Skeet在他的视频中提到了这个问题(虽然没有提供答案).
假设我们有一个名为Person的类,而Person类具有Name属性
然后我们有另一个班,间谍.当然,间谍是一个人,所以我们将从Person类派生.
public class Person
{
public string Name { get; set; }
}
public class Spy : Person
{
}
Run Code Online (Sandbox Code Playgroud)
我们不希望人们知道Spy的名字,所以我们希望这会给出一个编译错误:
static void ReportSpy(Spy spy) {
string name = spy.Name;
}
Run Code Online (Sandbox Code Playgroud)
或者:
static void ReportSpy(Spy spy)
{
Person spyAsPerson = spy;
string name = spyAsPerson.Name;
}
Run Code Online (Sandbox Code Playgroud)
我们怎么能防止这种事情发生呢?
假设我们有一个具有私有构造函数的类,通过friend我们可以允许某些特定的类仍然创建该类的对象:
class Foo
{
friend class Bar;
private:
Foo();
};
class Bar
{
Bar()
{
//create a Foo object
}
};
Run Code Online (Sandbox Code Playgroud)
现在如果我想要相反的friend,Foo看起来像这样:
class Foo
{
//enemy/foe??? class Bar; (if only)
public:
Foo();
};
Run Code Online (Sandbox Code Playgroud)
然后没有方法Bar可以访问Foo构造函数/使Foo其他类的对象可以(因为它是public).
class Bar
{
Bar()
{
Foo foo; //compiler error
}
};
Run Code Online (Sandbox Code Playgroud)
这样的构造是可能的还是我坚持保持Foo私密并为所有类添加朋友?
所以,我得到了这个:
struct People_Info {
bool isWorking;
std::string name;
int age;
float height;
};
int counter = 0;
int random = urand(1, 4);
std::map<uin64, People_Info> PeopleMap;
Run Code Online (Sandbox Code Playgroud)
现在,将调用一个函数,该函数将使用此结构在映射中创建一个条目,该结构将设置一些默认值:
PeopleMap[counter].isWorking = false;
PeopleMap[counter].name = "Mr";
PeopleMap[counter].age = 1;
PeopleMap[counter].height = 1.60f;
counter++;
Run Code Online (Sandbox Code Playgroud)
现在,这个函数应该为新人创建一个条目,但是,在整个脚本中,我将删除一些条目,所以如果我有 5 个元素,并且我删除第二个元素,那么,我想编辑地图上的每个人:
for(int i = 0; i < 5 ; i++) {
if(PeopleMap[i] == PeopleMap.end()) // Don't edit map entries that are erased
continue;
PeopleMap[i].isWorking = true;
}
Run Code Online (Sandbox Code Playgroud)
现在,由于某种原因它仍在编辑所有条目,我是否需要使用 new 为每个条目创建一个结构?
我想跟踪特定成员变量何时更改值,以便可以将其打印出来。现在,明显的解决方案是在成员的Set方法中添加跟踪功能,如下所示:
class Foo
{
public:
Foo() {}
void SetBar(int value)
{
//Log that m_bar is going to be changed
m_bar = value;
}
private:
int m_bar; // the variable we want to track
};
Run Code Online (Sandbox Code Playgroud)
我面临的问题是我正在开发一个大型项目,并且某些类具有许多内部更改成员变量而不是调用其Setter的方法。
m_bar = somevalue;
Run Code Online (Sandbox Code Playgroud)
代替 :
SetBar(somevalue);
Run Code Online (Sandbox Code Playgroud)
所以我想知道是否有一种更快/更干净的方法来实现我想要的,而不是仅仅将每个更改m_bar =为SetBar(。赋值运算符可能仅对该成员变量重载?
我一直被告知(并且一直在告诉)const,即使对于寿命很短的变量,保持- 正确性也是有价值和良好的做法,例如:
const std::string a = "Hello world";
Run Code Online (Sandbox Code Playgroud)
代替
std::string a = "Hello world";
Run Code Online (Sandbox Code Playgroud)
这个:
尽管自从现代C ++引入复制省略功能以来,标准中已有一些子句允许编译器调用move构造函数而不是复制构造函数:
在以下复制初始化上下文中,可以使用移动操作代替复制操作:
(3.1) 如果
return语句([stmt.return])中的表达式是一个(可能带有括号的)id表达式,该对象使用在最里面的封闭函数或lambda的主体或参数声明子句中声明的具有自动存储期限的对象进行命名-表达式,或(3.2) 如果
throw-expression[[expr.throw])的操作数是非易失性自动对象(函数或catch子句参数除外)的名称,其范围不会超出最内层封闭的结尾try-block(如果有一个),
这是否意味着使用const带有非默认复制/移动构造函数的对象实际上会产生性能损失,而不是在遇到这种省略的情况时会增加性能吗?
c++ ×6
c++11 ×2
delphi ×2
arduino ×1
bluetooth ×1
bluez ×1
c ×1
c# ×1
c++17 ×1
class ×1
copy-elision ×1
delphi-xe5 ×1
dictionary ×1
friend ×1
inheritance ×1
regional ×1
struct ×1
vector ×1