小编C N*_*sen的帖子

Python尾随L问题

我正在使用Python来编写嵌入式系统中内存(32位地址)中特定位置的某些操作.

当我将这些地址转换为字符串,整数和十六进制值时,似乎会出现尾随的L. 这可能是一个真正的痛苦,例如以下看似无害的代码将无法正常工作:

int(hex(4220963601))
Run Code Online (Sandbox Code Playgroud)

或这个:

int('0xfb96cb11L',16)
Run Code Online (Sandbox Code Playgroud)

有谁知道如何避免这种情况?

到目前为止,我已经提出了这种方法来剥离字符串的尾随L,但它看起来并不优雅:

if longNum[-1] == "L":
   longNum = longNum[:-1]
Run Code Online (Sandbox Code Playgroud)

python

22
推荐指数
2
解决办法
3万
查看次数

C++ Switch不会使用外部定义的变量进行编译

我正在使用MinGW GNU编译器编写C++,当我尝试在switch语句中使用外部定义的整数变量时会出现问题.我得到以下编译器错误:" case标签不会减少为整数常量 ".

因为我已经将整数变量定义为extern我相信它应该编译,有谁知道问题可能是什么?

以下是一个例子:

TEST.CPP

#include <iostream>
#include "x_def.h"

int main()
{
   std::cout << "Main Entered" << std::endl;


   switch(0)
   {
      case test_int:
         std::cout << "Case X" << std::endl;
         break;
      default:
         std::cout << "Case Default" << std::endl;
         break;
   }

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

x_def.h

extern const int test_int;
Run Code Online (Sandbox Code Playgroud)

x_def.cpp

const int test_int = 0;
Run Code Online (Sandbox Code Playgroud)

此代码将在Visual C++ 2008上正确编译.此外,我的Montanan朋友检查了ISO C++标准,看起来任何const-integer表达式都应该有效.这可能是编译器错误还是我错过了一些明显的东西?

这是我的编译器版本信息:

从C:/ MinGW/bin /../ lib/gcc/mingw32/3.4.5/specs
读取规格配置:../ gcc-3.4.5-20060117-3/configure --with-gcc --with- gnu-ld --with-gnu-as --host = mingw32 --target = mingw32 --prefix =/mingw --enable-threads --disable-nls --enable-languages …

c++ gnu

5
推荐指数
1
解决办法
1489
查看次数

STL地图价值构造函数

我有一个类X,我想将其放入std :: map类型的STL映射中.STL映射需要将X存储在某个地方的内存中,所以我正在寻找一种有效的(运行时和内存)方式来创建X并将其存储在地图中.

我注意到下面的代码,其中x是X类型的对象,stlMap是std :: map类型的映射:

stlMap["test"] = x;
Run Code Online (Sandbox Code Playgroud)

调用以下结果:

  1. X默认构造函数
  2. X复制构造函数
  3. X复制构造函数
  4. X析构函数
  5. X析构函数
  6. X赋值构造函数
  7. X析构函数

为什么要创建这么多X对象?

这是时间和记忆的低效利用吗?

有没有更好的方法将对象放入地图?也许将地图更改为x*的字符串映射?

c++ stl

3
推荐指数
1
解决办法
3062
查看次数

向前迭代然后反转STL容器

我有一个STL容器,我需要对容器中的每个元素执行一个操作.但是如果操作在任何元素上失败,我想要反转已经更改过的任何元素的操作.

例如,如果我有一个STL向量,指向一个数字bankAccount类,并希望每个增加50美元.但是,如果任何银行账户的失败由50增加,我想50 $任何已增加了账户的完全和减少取消的增加.

std::vector<bankAccount*> bankAccounts;
std::vector<bankAccount*>::iterator iter;

for (iter = bankAccounts.begin(); iter != bankAccounts.end(); ++iter)
{
    try
    {
        iter->increaseBalance(50);
    }
    catch (...)
    {
        // One of the bankAccounts failed to increase by 50, now I need to go 
        // back and decrease by 50 all of the bankAccounts that have already 
        // been increased.
    }
}
Run Code Online (Sandbox Code Playgroud)

有没有优雅的方法来做到这一点?也许使用STL算法或使用反向迭代器?

c++ stl

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

标签 统计

c++ ×3

stl ×2

gnu ×1

python ×1