有没有办法使用数组填充向量?
Is there a way to fill a vector using an array?
我正在尝试用我拥有的数组中的整数填充向量,但是当我检查向量的内容时,所有值均为零。
我正在使用 vector.push_back(( 来尝试填充向量,以便它与我需要以特定方式排序的数组顺序相同。
unsigned char* buffer = new unsigned char[size];
std::vector<unsigned char> *data = new std::vector<unsigned char>(size);
fread(buffer, sizeof(unsigned char), size, f);
for(int transfer = 0; transfer < size; transfer += 1){
std::cout << buffer[transfer];
data->push_back(buffer[transfer]);
std::cout << int(data->at(transfer));
}
fclose(f);
当我打印输出时,我可以看到这些值来自缓冲区数组时不为零,但当我从数据向量读取时,它们却不为零。下面是一些示例输出 φ0$0。
std::vector
有一个用于此目的的构造函数:
std::vector<unsigned char> data(buffer, buffer + size);
几乎总是应避免new
载体。
住
您正在使用的std::vector
构造函数的重载需要初始化向量的元素数量并初始化这些元素(在本例中为0
(。
行后
std::vector<unsigned char> *data = new std::vector<unsigned char>(size);
因此,*data
包含已设置为零的size
元素。
然后使用data->push_back(...)
,您将在这些size
元素之后添加其他元素。您不会覆盖以前的。
要么使用
std::vector<unsigned char> *data = new std::vector<unsigned char>();
默认初始化空向量,或使用
(*data)[transfer] = ...
以在给定位置设置元素。
此外,如果fread
读取的数组少于size
字节,则程序具有未定义的行为。您需要检查从其返回值中读取的字节数,并且不允许访问data
中超出的任何元素,因为您从未初始化过它。
您可以使用以下命令将其初始化为零:
unsigned char* buffer = new unsigned char[size]{};
如果要编写C++,请不要使用 C 库函数,如fread
,请使用<fstream>
提供的工具,即std::ifstream
,而是std::ofstream
。
同样,这里也不需要动态内存分配。使用自动存储声明变量:
unsigned char buffer[size]{};
std::vector<unsigned char> data(size);
其余语法也简化了:
data[transfer] = ...
最后,如另一个答案中所述,有一个std::vector
构造函数将为您执行整个复制循环。但是请注意,我关于未定义行为的论点在使用它时仍然适用。
将data
定义为自动数组,如
unsigned char buffer[size]{};
仅当size
是编译时常量时才有效。如果不是,那么我的这部分建议不适用。但是,在任何情况下都根本不需要使用数组。您可以初始化适当大小(编译时常量或非编译时常量(的std::vector
,并通过其.data()
方法将其作为缓冲区提供,该方法返回指向基础(连续(存储的指针:
std::vector<unsigned char> buffer(size);
fread(buffer.data(), sizeof(unsigned char), buffer.size(), f);
代码中不需要单独的缓冲区或任何动态分配。您可以创建具有所需大小的std::vector
,然后从文件中直接读取到矢量中。std::vector::data
成员函数返回指向向量的基础数组的指针,您可以将其传递给fread()
函数
std::vector<unsigned char> vec(size);
fread(vec.data(), sizeof(unsigned char), size, f);
理想情况下,您还将检查fread()
的返回值,以了解读取了多少元素。
- 用C++中的数字和条件填充向量
- 是否有可能让 c++ dll 在后台运行 python 程序并让它填充向量图?如果是这样,如何?
- 有没有办法使用数组填充向量?
- 用对对填充向量未按预期工作
- 可选类输入中的 C++ 填充向量
- 用构造函数调用填充向量
- 错误:以增量方式填充向量时,表达式必须具有整数或无作用域枚举类型
- C 中的填充向量
- 从输入文件中填充向量的向量
- 在循环中创建和填充向量
- 如何使用两列C 从文本文件中填充向量
- 在C++编程语言中,如何用n个向量长度的所有可能的字符串组合来填充向量
- 使用精神,如何在AST结构内填充向量
- 如何用键盘输入来填充C++向量
- 用随机数C 填充向量
- 构造时,用整数序列填充向量
- 使用指向部分专用函数成员的指针自动填充向量
- 用于填充向量的c++有状态函子
- C++:在类构造函数中填充向量后,向量成员被销毁
- 如何在类中用不同类的对象填充向量