小编b4h*_*and的帖子

编译器优化或我的误解

最近我测试了一些C++深度和暗角,我对一个微妙的点感到困惑.我的测试实际上非常简单:

// problem 1
// no any constructor call, g++ acts as a function declaration to the (howmany())
// g++ turns (howmany()) into (howmany(*)()) 
howmany t(howmany());

// problem 2
// only one constructor call
howmany t = howmany();
Run Code Online (Sandbox Code Playgroud)

我对上线的期望是; 第一个howmany()构造函数调用将生成一个临时对象,然后编译器将使用该临时对象和copy-constructor来实例化t.但是,编译器的输出确实让我困惑,因为输出只显示一个构造函数调用.我的朋友们提到了我关于编译器传值优化的问题,但我们对此并不确定.我想了解这里发生了什么?

问题2的输出如下.问题1完全超出了对象实例化,因为编译器将其表现为函数指针声明.

howmany()
~howmany()
Run Code Online (Sandbox Code Playgroud)

我的测试类是:

class howmany {
    public:
        howmany() {
            out << "howmany()" << endl;
        }
        howmany(int i) {
            out << "howmany(i)" << endl;
        }
        howmany(const howmany& refhm) {
            out << "howmany(howmany&)" << endl;
        }
        howmany& …
Run Code Online (Sandbox Code Playgroud)

c++ oop g++ copy-constructor compiler-optimization

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

有没有办法在javascript中创建hashmap并像添加和删除值一样操作它

我的要求是将键值对存储在数据结构中,并在必要时使用JavaScript中的键来获取或删除对.

如何在JavaScript中实现它,就像在Java中一样?

我已经看到了创建哈希映射实例的答案,如:

var hash={};
Run Code Online (Sandbox Code Playgroud)

现在即可在其中添加值,如:

hash={ "January":"1","Feb":"2" }
Run Code Online (Sandbox Code Playgroud)

我可以使用键动态插入值并获取它们并获得哈希映射的大小吗?

javascript hashmap keyvaluepair

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

为std :: shared_ptr指定一个Deleter,它适用于特定类型的所有对象或其派生类型

我的项目中有以下课程

class Base
{
    public:
    virtual ~Base(){};
}

class Der1: public Base
{
    public:
    virtual ~Der1(){};
}

class Der2: public Base
{
    public:
    virtual ~Der2(){};
}
Run Code Online (Sandbox Code Playgroud)

我持有这些类的对象为std::shared_ptr.我需要为所有类型Base或任何类型的对象提供自定义删除器derived types.

我想在删除方法中使用的代码将为所有这些对象做同样的事情,比方说

class Deleter
{
    public:
    void operator()( Base * b )
    {
        //Do something
        delete b;
    }
}
Run Code Online (Sandbox Code Playgroud)

而不是在每个对象的构造过程中提供删除器

std::shared_ptr< Der1 > pDer1( new Der1(), Deleter() );
std::shared_ptr< Der2 > pDer2( new Der2(), Deleter() );
Run Code Online (Sandbox Code Playgroud)

有没有办法指定类似"对于所有类型为Base的对象的共享指针或其派生类型Deleter用于删除的东西?由于删除类只是在shared_ptr的构造函数中采用,如何有人为特定类型指定删除器?

c++ smart-pointers shared-ptr delete-operator c++11

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

python-如何动态创建一个基于从文件中读取的字符串的名称的函数?

假设我有一个包含字符串“ unpredictable_words”的文件。我想读这个字符串,然后定义一个函数,如下所示:

def test_unpredictable_words(self):
    do_important_stuff()
Run Code Online (Sandbox Code Playgroud)

然后,我想将此函数注入到类定义中,以便可以在此类的任何实例上调用此函数。

我该怎么做?

我稍微看了一下这个答案-https: //stackoverflow.com/a/8160676/1701170-但我认为它并不能满足我的要求,或者至少我无法理解正在发生的事情。

python dynamic-function

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

错误:java.io.IOException:错误的值类:类org.apache.hadoop.io.Text不是类Myclass

我有我的mapper和reducer如下.但我得到了一些奇怪的例外.我无法弄清楚为什么会抛出这种异常.

public static class MyMapper implements Mapper<LongWritable, Text, Text, Info> {

    @Override
    public void map(LongWritable key, Text value,
        OutputCollector<Text, Info> output, Reporter reporter)
        throws IOException {
        Text text = new Text("someText")
            //process 
        output.collect(text, infoObjeject);
    }

}

public static class MyReducer implements Reducer<Text, Info, Text, Text> {

    @Override
    public void reduce(Text key, Iterator<Info> values,
        OutputCollector<Text, Text> output, Reporter reporter)
        throws IOException {
        String value = "xyz" //derived in some way
        //process
        output.collect(key, new Text(value)); //exception occurs at this line
    }

} …
Run Code Online (Sandbox Code Playgroud)

java hadoop elastic-map-reduce

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

为什么添加到列表的前面需要二次时间?

此代码示例取大O(N ^ 2)

results = []

for i in range(1000000)
    result = [f(i)] + results
Run Code Online (Sandbox Code Playgroud)

此代码示例取大O(N)

results = []

for i in range(1000000)
    result = results + [f(i)]
Run Code Online (Sandbox Code Playgroud)

为什么在这两种算法的Big O中存在如此明显的差异,唯一的区别是一个被添加到列表的前面而另一个被添加到列表的后面?

这对Java也适用吗?

python list

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

无法在 python 中解码西里尔文字符串

我有一个带有字符串的编码文件,例如

b'1'    b'\xca\xee\xef\xe5\xe9\xf1\xea' b'1'    b'ADMIN'    b'2013-07-08 00:21:55'  
b'2'    b'\xd7\xe5\xeb\xff\xe1\xe8\xed\xf1\xea' b'1'    b'ADMIN'    b'2013-07-08 00:22:05'  
Run Code Online (Sandbox Code Playgroud)

我应该如何解码它?我尝试使用编解码器,对 cp1251 进行解码/编码,但没有奏效。

file -bi 说 charset=us-ascii

西里尔文(cp1251)实际上应该有一个字符串

蟒蛇 2.7

输出:

>>> w=r'\xd7\xe5\xe\xff\xe1\xe8\xed\xf1\xea'
>>> w='\xd7\xe5\xe\xff\xe1\xe8\xed\xf1\xea'
ValueError: invalid \x escape
>>> w=r'\xd7\xe5\xe\xff\xe1\xe8\xed\xf1\xea'
>>> w.decode('raw_unicode_escape')
u'\\xd7\\xe5\\xe\\xff\\xe1\\xe8\\xed\\xf1\\xea'
>>> w.decode('utf-8')
u'\\xd7\\xe5\\xe\\xff\\xe1\\xe8\\xed\\xf1\\xea'
>>> unicode(w)
u'\\xd7\\xe5\\xe\\xff\\xe1\\xe8\\xed\\xf1\\xea'
>>> unicode(w, 'utf-8')
u'\\xd7\\xe5\\xe\\xff\\xe1\\xe8\\xed\\xf1\\xea'
Run Code Online (Sandbox Code Playgroud)

我做了一切:解码(“utf-8”),使用unicode等等,但没有任何变化。每次我得到相同的字节集。

python encoding

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

Python - 如果string包含列表或集合中的单词

我搜索得非常彻底,但没有找到合适的答案.我是Python/Programming的新手,所以我很感激我能得到的任何建议:

我正在尝试搜索某些关键字的用户输入字符串.例如,我们会说过滤亵渎.根据我的研究,我已经能够制作以下虚拟示例:

Swear = ("curse", "curse", "curse") #Obviously not typing actual swear words, created a set
Userinput = str.lower(input("Tell me about your day: "))

if Userinput in Swear:
     print("Quit Cursing!")
else:
     print("That sounds great!")
Run Code Online (Sandbox Code Playgroud)

使用上面的内容,如果用户输入一个确切的单词形式作为整个字符串,它将打印"quit cursing"; 但是,如果用户输入"诅咒"或"我喜欢说诅咒",它将打印出"听起来很棒!"

最终我需要的是能够在整个字符串中搜索关键字,而不是整个字符串的完全匹配.例如:"我去公园,感觉像是尖叫诅咒 "应该回归真实的比赛.

python string set

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

C++循环通过结构向量

说我有

 struct S {
    double A;
    double B;
    double C;
  };
Run Code Online (Sandbox Code Playgroud)

   std::vector<S> vecS(10);
Run Code Online (Sandbox Code Playgroud)

我正在尝试编写一个通用函数void F(std::vector<S> vecS,structure S.x),以便可以进行以下计算

 F(std::vector<S> vecS, structure S.x) {
        for(i=1;i<10;i++)
          vecS[0].x += vecS[i].x;  
       // note the structure does not have memeber "x"
       // I want to give that as a generic input to access A,B or C
  }
Run Code Online (Sandbox Code Playgroud)

上面的代码不是正确的代码,但我只是想说明我想要计算的内容.

我想要计算的是循环特定元素的结构向量.这可能是一个简单的好方法吗?有人可以给我一些指示如何以通用方式访问结构的成员(也许这就是我需要编写这个函数).

提前致谢.

c++ pointer-to-member

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

仅手动冲洗cout

据我所知,std::endl流入std::cout将刷新它.我认为这种行为对大多数应用程序都有意义.

我的问题是我有一些输出使用多个输出,std::endl因此刷新输出.这对于我的程序的性能来说真的很糟糕,并且因为我跳得很多而导致很多图形故障.

所以我的问题是,如果我可以告诉std::cout等待下一次刷新,直到我明确地调用std::cout.flush()std::flush流入std::cout.
如果这是可能的,我也想知道我怎么能扭转它,因为它对我来说并不总是有意义.

c++ cout flush stream

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