c++ - vector 调整大小/分配不添加默认值

标签 c++ vector constructor

我有一个类,它有一个字符串 vector 作为变量,还有一个构造函数,它接受输入来设置这个 vector 的大小。唯一的问题是 vector 中的元素根本没有设置默认值。这里出了什么问题?尝试了调整大小和分配,但每次都以空白结束。

类:

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

class Lab
{
private:
    vector<string> station;
    int id;

public:
    Lab()
    {
        station[0] = "Empty";
        id = 0;
    };
    Lab(int ID, int size)
    {
        station.assign(size, "Empty");
        id = ID;
    };
    Lab(const Lab& labcpy)
    {
        station.resize(labcpy.station.size());
        id = labcpy.id;
    };

主要设置 vector 大小的地方:

#include <fstream>
#include "lab.h"
using namespace std;
int main(int argc, char* argv[])
{
    ifstream labnumber_file(argv[1]);
    vector<Lab> lab_v;

    int labnum;
    int usernum;
    while(!labnumber_file.eof())
    {
        labnumber_file >> labnum;
        labnumber_file >> usernum;

        lab_v.push_back(Lab(labnum, usernum));
    }

最佳答案

问题是 push_back 使用了你的复制构造函数,但你的复制构造函数没有将任何东西复制到 station 中。

由于您的数据成员可以安全地复制,只需使用默认的复制构造函数即可。删除您定义的复制构造函数。

规则三是,如果需要定义析构函数,还需要定义拷贝构造函数和赋值运算符。但是,由于您不需要定义析构函数,因此该规则不适用于 Lab 类。

关于c++ - vector 调整大小/分配不添加默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11324001/

相关文章:

c++ - 为什么这个 C 代码中的字母表被分成多个范围?

c++ - 在 vector 上放置背线

c++ - "Co"中的 "CoClass"是什么意思?

c++ - qt - 绘画事件之外的 setText 不好吗?

c++ - 尽管使用 std::is_same 测试它是一个 std::string,但无法将类型名从 int 转换为 std::string

css - 为什么在 Photoshop 网页设计模板中常用矢量和图层蒙版?

c++ - STL 容器和大量数据

C++11构造函数继承和纯虚方法

.net - 单元测试构造函数时的多个断言?

C++如何使用参数化构造函数实例化对象?