相关疑难解决方法(0)

矢量:初始化还是保留?

我知道向量的大小,这是初始化它的最佳程序?:

选项1

vector<int> vec(3); //in .h
vec.at(0)=var1;     //in .cpp
vec.at(1)=var2;     //in .cpp
vec.at(2)=var3;     //in .cpp
Run Code Online (Sandbox Code Playgroud)

选项2

vector<int> vec;     //in .h
vec.reserve(3);     //in .cpp
vec.push_back(var1);     //in .cpp
vec.push_back(var2);     //in .cpp
vec.push_back(var3);     //in .cpp
Run Code Online (Sandbox Code Playgroud)

我猜选项2优于1.是吗?其他选择?

c++ vector

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

删除函数unique_ptr

我根本不理解错误输出,我写了一个生成它的类.

UserQueues.h

#ifndef USERQUEUES_H
#define USERQUEUES_H

#include <deque>
#include <vector>
#include <memory>
#include "Job.h"

class UserQueues 
{
    public:
        typedef std::unique_ptr<Job> JobPtr;
        typedef std::deque<JobPtr> JobDeque;

    public:
        UserQueues();
        void printDeques();
        void addToDeque(JobPtr job, int queueId);

    public:
        const uint QUEUE_QTY = 3;

    private:
        std::vector<JobDeque> _jobDeques;
};

#endif
Run Code Online (Sandbox Code Playgroud)

UserQueues.cpp

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

UserQueues::UserQueues() : 
    _jobDeques()
{
    for(unsigned int idx = 0 ; idx < QUEUE_QTY ; ++idx)
    {
        _jobDeques.push_back(JobDeque());
    }
}

void UserQueues::printDeques()
{
    for (std::size_t idx = 0; idx < _jobDeques.size(); ++idx) …
Run Code Online (Sandbox Code Playgroud)

c++ c++11

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

MoveInsertable和CopyInsertable之间的区别?

有人可以对这两个术语提供更清晰的解释吗?

换句话说,请举例说明一些简单的解释.

(来自:cppreference.com)

MoveInsertable:指定可以在未初始化的存储中复制该类型的右值.

CopyInsertable:指定可以在未初始化的存储中就地复制构造类型的实例.

c++ compiler-construction c++11

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

为什么移动构造函数是在用户声明的析构函数存在时生成的?

遵循这个答案这个移动构造函数规范,应该没有隐式移动构造函数或移动赋值运算符.

但是,以下代码仍在gcc 7.2.1中编译:

#include <vector>
#include <iostream>
using namespace std;

struct NoCopyNoMove
{
    NoCopyNoMove(const NoCopyNoMove&) = delete;
    NoCopyNoMove& operator=(const NoCopyNoMove&) = delete;
    NoCopyNoMove(NoCopyNoMove&&) = delete;
    NoCopyNoMove& operator=(NoCopyNoMove&&) = delete;

    NoCopyNoMove(int){};
};

struct NoCopy
{
    NoCopy(const NoCopyNoMove&) = delete;
    NoCopy& operator=(const NoCopyNoMove&) = delete;
    // NoCopy(NoCopy&&) = delete;
    // NoCopy& operator=(NoCopy&&) = delete;
    ~NoCopy() {
        std::cout << "decontructor" << std::endl;
    }
    NoCopy(int){};
};

int main()
{
    // vector<NoCopyNoMove> y; // fails!
    vector<NoCopy> y;
    y.emplace_back(1);
    y.emplace_back(2);
}
Run Code Online (Sandbox Code Playgroud)

c++ c++11

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

标签 统计

c++ ×4

c++11 ×3

compiler-construction ×1

vector ×1