小编vig*_*990的帖子

C++在地图中插入unique_ptr

我有一个类型的C++对象 ObjectArray

typedef map<int64_t, std::unique_ptr<Class1>> ObjectArray;
Run Code Online (Sandbox Code Playgroud)

创建一个unique_ptr新的类型对象Class1并将其插入到类型的对象中的语法是什么ObjectArray

c++ pointers stl map unique-ptr

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

插入具有没有复制构造函数的对象的向量

我有一个类,其副本构造函数被显式删除(因为A在内部使用指针,我不想陷入浅层复制陷阱):

class A {
  public:
    A(const A&) = delete;
    A& operator=(const A&) = delete;

    A(const B& b, const C& c);
}
Run Code Online (Sandbox Code Playgroud)

现在我有一个类型的向量,vector<A> aVector;我想在其中插入元素 - 所以我使用emplace_back:

aVector.emplace_back(b, c);
Run Code Online (Sandbox Code Playgroud)

但是,这无法使用gcc编译,我收到错误 -

third-party/gcc-4.7.1-glibc-2.14.1/libgcc/libgcc-4.7.1/afc21dc/include/c++/4.7.1/bits/stl_construct.h: In instantiation of 'void std::_Construct(_T1*, _Args&& ...)
third-party/gcc-4.7.1-glibc-2.14.1/libgcc/libgcc-4.7.1/afc21dc/include/c++/4.7.1/bits/stl_uninitialized.h:77:3:   required from 'static _ForwardIterator std::__uninitialized_copy<_TrivialValueTypes>::__uninit_copy(_InputIterator, _InputIterator, _ForwardIterator)  
third-party/gcc-4.7.1-glibc-2.14.1/libgcc/libgcc-4.7.1/afc21dc/include/c++/4.7.1/bits/stl_uninitialized.h:119:41:   required from '_ForwardIterator std::uninitialized_copy(_InputIterator, _InputIterator, _ForwardIterator) 
third-party/gcc-4.7.1-glibc-2.14.1/libgcc/libgcc-4.7.1/afc21dc/include/c++/4.7.1/bits/stl_uninitialized.h:260:63:   required from '_ForwardIterator std::__uninitialized_copy_a(_InputIterator, _InputIterator, _ForwardIterator, std::allocator<_Tp>&) 
third-party/gcc-4.7.1-glibc-2.14.1/libgcc/libgcc-4.7.1/afc21dc/include/c++/4.7.1/bits/stl_uninitialized.h:283:67:   required from '_ForwardIterator std::__uninitialized_move_if_noexcept_a(_InputIterator, _InputIterator, _ForwardIterator, _Allocator&)
third-party/gcc-4.7.1-glibc-2.14.1/libgcc/libgcc-4.7.1/afc21dc/include/c++/4.7.1/bits/vector.tcc:410:6:   required from 'void std::vector<_Tp, _Alloc>::_M_emplace_back_aux(_Args&& ...) 
third-party/gcc-4.7.1-glibc-2.14.1/libgcc/libgcc-4.7.1/afc21dc/include/c++/4.7.1/bits/vector.tcc:102:4: …
Run Code Online (Sandbox Code Playgroud)

c++ vector c++11 emplace

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

C++:const char*const*的含义

在其中一个C++程序中,我看到了一个函数原型: int Classifier::command(int argc, const char*const* argv)

什么const char*const* argv意思?它是一样的const char* argv[]吗?是否const char** argv也意味着相同?

c++ pointers function-parameter function-prototypes

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

C++构造函数理解

考虑这个构造函数: Packet() : bits_(0), datalen_(0), next_(0) {}

注意bits_,datalen_并且next_Packet类中的字段定义如下:

u_char* bits_;
u_int datalen_;
Packet* next_;
Run Code Online (Sandbox Code Playgroud)

这部分构造函数意味着什么? bits_(0), datalen_(0), next_(0)

c++ constructor initialization initialization-list

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

C++中的静态成员数组

我在类中创建了一个静态成员数组GTAODV.

static int numdetections[MAXNODES];
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试在类方法中访问此数组时(下面的示例),

 numdetections[nb->nb_addr]++;
 for(int i=0; i<MAXNODES; i++) if (numdetections[i] != 0) printf("Number of detections of %d = %d\n", i, numdetections[i]);
Run Code Online (Sandbox Code Playgroud)

链接器在编译期间出错:

gtaodv/gtaodv.o: In function `GTAODV::command(int, char const* const*)':
gtaodv.cc:(.text+0xbe): undefined reference to `GTAODV::numdetections'
gtaodv.cc:(.text+0xcc): undefined reference to `GTAODV::numdetections'
gtaodv/gtaodv.o: In function `GTAODV::check_malicious(GTAODV_Neighbor*)':
gtaodv.cc:(.text+0x326c): undefined reference to `GTAODV::numdetections'
gtaodv.cc:(.text+0x3276): undefined reference to `GTAODV::numdetections'
collect2: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

为什么会这样?

c++ arrays linker static-members

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

在地图插入过程中C++移动保证

我有一个代码片段,看起来有点像这样:

std::unordered_map<FooId, Foo> fooMap;
Foo foo1(..);
fooMap.emplace(foo1.id(), std::move(foo1));
Run Code Online (Sandbox Code Playgroud)

是安全的,即foo1.id()之前调用的C++语言标准保证std::move(foo1)吗?

c++ unordered-map move-semantics c++11

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

更新C++向量中的所有元素

我有一个结构的向量 - 说结构是这样的:

struct foo {
  int bar1;
  int bar2;
}
Run Code Online (Sandbox Code Playgroud)

现在我想更新向量的每个元素,更新乘以bar12.

这样做的天真方法是迭代向量的每个元素,但有没有更好的方法来实现这一点,可能是通过使用带有c ++ 11 lambda函数的库函数?

c++ lambda stl vector c++11

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