小编Ath*_*ase的帖子

std :: vector的一个小问题,并在循环时更改集合

此循环在运行时更改迭代器:

std::vector<int> c;
c.push_back(1);
c.push_back(2);

std::vector<int>::iterator iter    = c.begin();
std::vector<int>::iterator endIter = c.end();

while( iter != endIter )
{
    std::cout << (*iter) << std::endl;
    iter = c.erase(iter);
}
Run Code Online (Sandbox Code Playgroud)

它不起作用,因为:

对迭代元素及其与容器末尾之间的元素的迭代器和引用无效.过去的迭代器也是无效的

我怎样才能重写这个(不使用std::list和使用while循环)?

顺便说一句,我知道auto自C++ 11以来已经实现了.使用它为什么有益?

c++ stdvector

9
推荐指数
3
解决办法
506
查看次数

std :: function和shared_ptr

我一直在使用Loki的Functor,我最近问了一个关于它的问题(仍然没有答案......)我被告知要使用std :: function,但我更喜欢Loki的Functor实现,因为它也适用于各种各样的指针作为参数(例如std :: shared_ptr).

struct Toto
{
    void foo( int param )
    {
        std::cout << "foo: " << param << std::endl;
    }
};

int
main( int argc, const char** argv )
{
    std::shared_ptr<Toto> ptr = std::make_shared<Toto>();

    Loki::Functor<void, LOKI_TYPELIST_1(int)> func( ptr, &Toto::foo );

    func(1);
}
Run Code Online (Sandbox Code Playgroud)

有没有办法用std :: function做到这一点?

c++ loki std-function

7
推荐指数
1
解决办法
3361
查看次数

C++ 14 TS功能和GCC 4.8

我想尝试一些新的功能,这将使它的C++ 2014 的修订std::make_uniquestd::filesystemfunctionnalities.我使用ubuntu 14.04和GCC/G ++ 4.8(安装了libstdc ++ - 4.8-dev)和标志-std=c++1y集.但是没有std::make_unique包含<tr1/memory>,也没有<experimental/...>标题.为了能够使用这些新功能,我需要做些什么?

谢谢 !

c++ c++14

7
推荐指数
1
解决办法
5210
查看次数

Gitlab CI 准备环境:来自守护进程的错误响应:hcssshim::CreateComputeSystem

我创建了一个 Windows 映像,并将其推送到自定义注册表。图像构建没有任何错误。它也可以在任何使用该命令的机器上完美运行docker run

我在 Windows 主机上使用配置为使用 docker-windows 的 gitlab 运行程序。docker run在 shell 中使用该命令时,该映像在 Windows 主机上也运行得非常好。

但是,当 gitlab CI 触发管道时,我收到以下包含错误的日志:

Running with gitlab-runner 14.9.0 (d1f69508)
  on Test windows docker runner daSVobYW
Preparing the "docker-windows" executor 00:01
Using Docker executor with image someaddress:someport/windows_msvc2019_qt-desktop-6.2.3:v1.0.0 ...
Pulling docker image someaddress:someport/windows_msvc2019_qt-desktop-6.2.3:v1.0.0 ...
Using docker image sha256:XXX for someaddress:someport/windows_msvc2019_qt-desktop-6.2.3:v1.0.0 with digest someaddress:someport/windows_msvc2019_qt-desktop-6.2.3@sha256:XXX ...
Preparing environment
ERROR: Job failed (system failure): prepare environment: Error response from daemon: hcsshim::CreateComputeSystem 2f20866e4110118edc3274945d93d6138a16a67f9865d325e8b81c572ce08b96: Access denied. (exec.go:73:0s). …
Run Code Online (Sandbox Code Playgroud)

gitlab docker gitlab-ci gitlab-ci-runner docker-for-windows

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

异常安全移动运算符

我通常(尝试)使用复制交换习语编写异常安全的复制赋值运算符,我想知道在编写移动赋值运算符时是否应该关注异常。下面是一个复制赋值运算符的例子:

template<class T>
CLArray<T>&
CLArray<T>::operator=( const CLArray& rhs )
{
    CLArray tmp( rhs );
    std::swap( size_, tmp.size_ );
    std::swap( data_, tmp.data_ );
    return *this;
}
Run Code Online (Sandbox Code Playgroud)

但是移动分配呢?我的意思是,如果在此移动操作期间在代码中的其他地方抛出异常,我将丢失两个对象的状态,对吗?所以我必须先创建一个本地副本,然后删除除新创建的之外的所有内容CLArray......

template <class T>
CLArray<T>&
CLArray<T>::operator=( CLArray<T>&& rhs )
{
    size_ = rhs.size_;
    data_ = std::move( rhs.data_ );
    return *this;
}
Run Code Online (Sandbox Code Playgroud)

请注意,这data_是一个 std::vector,感谢您的回答!

c++ move

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

lambda表达式中的std :: pair

我只想知道如何在lambda表达式捕获括号内编写对.因为下面的代码没有编译所以我错过了一些东西......

std::vector<std::pair<std::string, std::string>> container1_;

for( auto iter : container1_ )
{
    auto result = std::find_if( container2_.cbegin(), container2_.cend(),
        [iter.first]( const std::string& str )->bool { return str == iter.first; } );
}

In member function ‘bool MsgChecker::CheckKeys()’:
error: expected ‘,’ before ‘.’ token
error: expected identifier before ‘.’ token
Run Code Online (Sandbox Code Playgroud)

c++ lambda c++11

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

存储方法的返回类型和参数类型

是否有可能确定和存储的返回类型SomeMethod使用decltype(如果是做的最好办法,否则什么是做到这一点的最好办法)在编译时?

是否也可以使用相同的工具来存储参数的类型列表SomeMethod

这背后的想法是使用getter从类外部轻松访问它们.

class SomeClass
{
public:
    typedef [???] ProcRetType;
    typedef [???] ProcArgTypeList;

public:
    SomeClass() { }
    ~SomeClass() noexcept { }

    SomeType SomeMethod( SomeType1 arg1, SomeType2 arg2 ) { }

    // Data members
private:
};
Run Code Online (Sandbox Code Playgroud)

c++ decltype compile-time c++11

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

std :: array编译时间扣除

我有一段代码,我尝试在给定等待数据类型的情况下自动解码缓冲区.数据表示为元组:

std::tuple<uint8_t, int32_t> data;
size_t bufferIndex;
IOBuffer::ConstSPtr buffer( std::make_shared<IOBuffer>(5) );
Run Code Online (Sandbox Code Playgroud)

我也有元组heplers迭代元组并为每个元素执行一个仿函数:

//-------------------------------------------------------------------------
//
template <typename Function, typename ...Tuples, typename ...Args>
void IterateOverTuple( Function& f, std::tuple<Tuples...>& t,
                       Args&... args )
{
    impl::IterateOverTupleImpl<0, sizeof...(Tuples),
        std::tuple<Tuples...>>()( f, t, args... );
}
//---------------------------------------------------------------------
//
template <int I, size_t TSize, typename Tuple>
struct IterateOverTupleImpl
    : public IterateOverTupleImpl<I + 1, TSize, Tuple>
{
    template <typename Function, typename ...Args>
    void operator()( Function& f, Tuple& t, Args&... args )
    {
        f( std::get<I>(t), args... );
        IterateOverTupleImpl<I + 1, TSize, …
Run Code Online (Sandbox Code Playgroud)

c++ compile-time stdtuple

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