使用 for 循环的 c++ 中的向量
Vector in c++ using for loop
我一般是c++的新手。因此,在最近有人帮助使用 Arduino 类型项目读取 RFID 标签后,我一直在尝试学习使用矢量。这真的让我觉得我不知道如何编程。所以我打了书!
所以这里有一个问题:当我执行以下代码时:
#include <iostream>
#include <vector>
struct Runner{
char runnerTag[32];
uint32_t ts;
};
std::vector<Runner > runners;
int main() {
std::cout << "Hello, Runners!n";
for (int i = 0; i < 100; i++) {
std::string runnertg = "testTrackTag01";
uint32_t timeStamp = rand() % 100 + 1;
runners[i] = new Runner({runnertg, timeStamp});
}
return 0;
}
我从xcode收到这条烦人的小消息:
No matching constructor for initialization of 'Runner'
在上述代码片段的第 16 行。我到底做错了什么?
-
表达式
new Runner({runnertg, timeStamp})
具有类型不匹配。runnertg
的类型为std::string
,而元素Runner::runnerTag
的类型为char[32]
。 -
表达式
runners[i] = new Runner({runnertg, timeStamp});
具有另一种类型不匹配。runners
的元素类型是Runner
,而表达式new Runner({runnertg, timeStamp})
的类型是Runner*
。 -
runners[i]
是出站访问。runners
的大小为 0。i
的所有值runners[i]
的元素不存在。 -
存在内存泄漏,因为所有代码路径的每个
new
都没有匹配的delete
。 -
不要使用
rand()
.
你使用的很多代码都是旧式的C,混合了一些C++STL代码。 我将尝试一次解决几个问题。
struct
是一种抽象数据类型,通常用于(通常(组织基元数据类型。 虽然struct
和class
之间的唯一区别是后者将所有成员默认为私有,在这种情况下不起作用,但在传递时削减这些东西是一件好事。
其次,char
数组繁琐、凌乱且容易出错。 请尝试std::string
。
最后,让我们创建一个采用两个参数的构造函数。
因此:
#include <string>
class Runner {
public:
std::string runnerTag;
uint32_t ts;
Runner(std::string, uint32_t);
};
接下来的事情。 使用数组索引运算符[]
访问或修改std::vector
是危险的,并且违背了使用容器的目的以及随之而来的所有精彩功能。
既然你知道 for 循环,让我们试试这个:
for (int i = 0; i < 100; i++) {
std::string runnertg = "testTrackTag01";
uint32_t timeStamp = rand() % 100 + 1;
Runner Runner(runnertg, timeStamp);
runners.push_back(Runner);
}
在代码末尾,在 main 函数的作用域之外,按如下方式定义构造函数:
Runner::Runner(std::string rt, uint32_t ts) {
runnerTag = rt;
ts = ts;
}
这应该让你开始。
您不能将std::string
转换为这样的char
数组。将成员变量的类型runnerTag
更改为std::string
。此外,您正在访问不存在的矢量元素。使用resize
创建它们。或者更好的是,使用emplace_back
同时执行这两项操作。此外,不要使用int
来迭代容器,而是std::size_t
。另外,不要使用rand()
,而是使用<random>
标头中的类。使用 % 的技巧会产生不均匀分布。
- 写入向量<向量<bool>>
- 函数向量_指针有不同的原型,我可以构建一个吗
- std::向量与传递值的动态数组
- 将值指定给向量(2D)的向量中的某个位置
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 如何使用向量的template_back函数
- 尝试通过多个向量访问变量时,向量下标超出范围
- 如何通过派生类函数更改基类中的向量
- C++从另一个类访问公共静态向量的正确方法是什么
- 如何将ampl中的集合表示为c++中的向量
- 变量没有改变?通过向量的函数调用
- 迭代时从向量和内存中删除对象
- 向量 <int> a {N, 0} 和 int arr a[N] = {0} 的时间复杂度有什么区别
- 如何为模板化对象创建模板向量?VS正在投掷C3203
- 计算排序向量的向量中唯一值的计数
- 矩阵向量乘法(cublasDgemv)返回零
- 一对向量构造函数:初始值设定项列表与显式构造
- 将结构向量排序为子组
- 在C++中调整向量中的索引
- 向量元素的引用地址与它所指向的向量元素的地址不同.为什么