小编Mar*_*dik的帖子

std :: remove_if删除的元素去哪儿了?

参考指出,

template< class ForwardIt, class UnaryPredicate >
ForwardIt remove_if( ForwardIt first, ForwardIt last, UnaryPredicate p );
Run Code Online (Sandbox Code Playgroud)

指向范围的旧端和新端之间的元素的迭代器仍然是可解除引用的,但元素本身具有未指定的值.

我尝试了这个简单的程序,通过"未指定的值"找出它们的含义.

#include <vector>
#include <memory>
#include <iostream>
#include <algorithm>

int main()
{
    std::vector< std::shared_ptr<int> > ints;
    for (int i = 0; i < 10; ++i)
        ints.push_back(std::make_shared<int>(i));
    std::remove_if(ints.begin(), ints.end(), 
                  [](const std::shared_ptr<int>& element)
                  {
                      return *element % 7 != 0;
                   });
    for (int i = 0; i < 10; ++i)
        std::cout << *ints[i] << std::endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出是:

0
7
2
3 …
Run Code Online (Sandbox Code Playgroud)

c++ gcc stl

4
推荐指数
3
解决办法
1316
查看次数

qmake找不到任何源文件或头文件

我正试图将我的项目从一台计算机qt4带到另一台新安装的地方qt5,我遇到了一个非常奇怪的问题.

qmake突然找不到我的任何源文件或头文件.

这是一个极简主义的例子:

QT       += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = untitled
TEMPLATE = app


SOURCES += main.cpp\
        mainwindow.cpp

INCLUDEPATH += $$PWD/Dir/
DEPENDPATH += $$PWD/Dir/

HEADERS  += mainwindow.h \
    f.h \

FORMS    += mainwindow.ui
Run Code Online (Sandbox Code Playgroud)

Dir/f.h存在于同一目录中untitled.pro.我从qmake得到这个输出:

05:18:45: Starting: "/opt/QtSDK/5.0.2/gcc/bin/qmake" 
/home/martin/Projects/untitled/untitled.pro 
-r -spec linux-g++ CONFIG+=debug CONFIG+=declarative_debug CONFIG+=qml_debug
WARNING: Failure to find: f.h
05:18:45: The process "/opt/QtSDK/5.0.2/gcc/bin/qmake" exited normally.
Run Code Online (Sandbox Code Playgroud)

我完全不知道造成这种情况的原因.可能是什么问题呢?

编辑:

当我手动添加这样的名称时:

HEADERS += Dir/f.h \
Run Code Online (Sandbox Code Playgroud)

qmake 不抱怨

qt qmake qt5

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

如何使用数字索引访问LibreOffice Calc中的单元格?

LibreOffice Calc中是否有一个函数接受一个整数x和一个整数y并用该位置吐出单元格的内容?

有一个函数ADDRESS吐出给定[x; y]的地址.问题是我不知道如何取消引用它.

libreoffice-calc

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

两个双打是否可以相等而不是同时相等?

我的程序中有一个非常奇怪的错误.我无法在可重现的代码中隔离错误,但在我的代码中的某个位置有:

    double distance, criticalDistance;
    ...

    if (distance > criticalDistance)
    {
        std::cout << "first branch" << std::endl;
    }
    if (distance == criticalDistance)
    {
        std::cout << "second branch" << std::endl;
    }
Run Code Online (Sandbox Code Playgroud)

在调试构建中一切都很好.只执行一个分支.

但是在发布版本中,所有地狱都会破裂,有时两个分支都会被执行.

这很奇怪,因为如果我添加else条件:

    if (distance > criticalDistance)
    {
        std::cout << "first branch" << std::endl;
    }
    else if (distance == criticalDistance)
    {
        std::cout << "second branch" << std::endl;
    }
Run Code Online (Sandbox Code Playgroud)

这不会发生.

请问,这可能是什么原因?我在32位计算机上的Ubuntu 13.10上使用gcc 4.8.1.

EDIT1:

我正在使用预编译器标志

  • -std = GNU ++ 11
  • -gdwarf-3

EDIT2: …

c++ floating-point

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

为什么我们有std :: string :: npos但没有std :: vector :: npos?

我想用-1来表示尚未计算的大小:

std::vector<std::size_t> sizes(nResults, -1);
Run Code Online (Sandbox Code Playgroud)

而我想知道为什么没有更具表现力的方式:

std::vector<std::size_t> sizes(nResults, std::vector<std::size_t>::npos);
Run Code Online (Sandbox Code Playgroud)

c++ containers c++-standard-library

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

在这种情况下,异常逃避try-catch块的异常的最可能原因是什么?

我在像这样的Kotlin项目中使用Spring WebClient:

data class DTO(val name: String)

@Component
class Runner: ApplicationRunner
{
    override fun run(args: ApplicationArguments?)
    {
        try
        {
            val dto = get<DTO>()
        }
        catch (e: Exception)
        {
            println("ERROR, all exceptions should have been caught in 'get' ")
        }
    }
}

inline private fun<reified TResult: Any> get(): TResult?
{
    var result: TResult? = null

    try
    {
    result = WebClient.create("https://maps.googleapis.com/maps/api/nonexisting")
        .get()
        .retrieve()
        .bodyToMono<TResult>()
        .block()
    }
    catch (e: Exception)
    {
        println("WORKS AS EXPECTED!!")
    }

    return result
}
Run Code Online (Sandbox Code Playgroud)

客户端将抛出一个异常,因为API将返回404.但是异常没有被捕获到它应该的位置,即在 …

generics spring exception kotlin spring-webflux

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

你能在Kotlin有一个通用的主要构造函数吗?

这可行:

class Generic<T, R>(thingy: R)
{
    val x = thingy.getX()
}
Run Code Online (Sandbox Code Playgroud)

但是参数R应该不是类签名的一部分.它仅在施工时有用.同样,泛型方法的类型参数与类的类型参数无关.

但是,这不起作用:

class Generic<T>(thingy: R)
{
    val x = thingy.getX()
}
Run Code Online (Sandbox Code Playgroud)

这也不是:

class Generic<T><R>(thingy: R)
{
    val x = thingy.getX()
}
Run Code Online (Sandbox Code Playgroud)

我没有在文档中找到答案.

generics kotlin

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

如何为类的继承层次结构的getter创建统一接口?

我认为没有代码的任何解释都会更加模糊.所以这里的代码是我尽量保持一切尽可能简单的代码.

#include <vector>
#include <iostream>

class WithParametersBase
{
public:
    WithParametersBase();

    double getX() const {return 0.0;}
    double getY() const {return 1.0;}

    //let's say I want to access these members using an unified interface:

    double getParameter(int index) const;

    // For example index == 0 means getX and index == 1 means getY.
    // I could implement it for example like this:

protected:

    void addGetter(double (WithParametersBase::* getter)()const)
    {
        getters_.push_back(getter);
    }

    std::vector<double (WithParametersBase::*)()const> getters_;
};

WithParametersBase::WithParametersBase()
{
    addGetter(&WithParametersBase::getX);
    addGetter(&WithParametersBase::getY);
}

double WithParametersBase::getParameter(int index) const …
Run Code Online (Sandbox Code Playgroud)

c++ templates pointers c-preprocessor

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

如何使用auto和decltype关键字来简化模板参数推导?

我正在实现合并排序算法.问题是当我尝试在算法中使用自动推导类型的向量时.

template <typename TIterator, typename TCompare>
void mergeSort(TIterator begin, TIterator end, TCompare criterium)
{
     //...
     auto help = *begin;                // help is a value (not a reference)
     QVector<decltype(help)> leftPart;  // now decltype(help) is also a value
     //...                              // and not a reference
}
Run Code Online (Sandbox Code Playgroud)

这有效.

但是一旦我使算法通过TIterators常量引用,我得到的错误是我一生中从未得到过的错误:

template <typename TIterator, typename TCompare>
void mergeSort(const TIterator& begin, const TIterator& end, TCompare criterium)
{
     //...
     auto help = *begin;                    // help is a value (not a reference)
     QVector<decltype(help)> leftPart;  // now decltype(help) …
Run Code Online (Sandbox Code Playgroud)

c++ gcc templates c++11

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

在为智能指针和指针编写通用代码时,如何获得简单的指针?

当我想实现一个功能时:

template <typename TIterator>
void doSomething(TIterator begin, TIterator end);
Run Code Online (Sandbox Code Playgroud)

能够同时使用:

std::vector<Widget*>
Run Code Online (Sandbox Code Playgroud)

std::vector<std::shared_ptr<Widget>>
Run Code Online (Sandbox Code Playgroud)

我该如何访问底层指针?由于某种原因std::shared_ptr<Widget>,不能隐式转换为Widget*,我必须使用该get()功能.这样,代码不起作用,std::vector<Widget*>因为Widget*没有get()功能.

我这样做是:

void functionAcceptingPointer(Widget* widget);

template <typename TIterator>
void doSomething(TIterator begin, TIterator end);
{
    std::map<double, decltype(&(**begin))> map;
    ...
    auto firstPointer = &(**begin);
    ...
    functionAcceptingPointer(&(**begin));
    ....
}
Run Code Online (Sandbox Code Playgroud)

这是使用操作符*后面的双重引用&,只要我需要一个普通的指针.

它完成了这项工作,但我很好奇是否有一些更易读,通常使用的方法来做到这一点,如果有一些东西可以回来困扰我,我填写我的代码与丑陋的东西,如 &(**begin)

c++ c++11

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