使用向量中每个对象的函数
Using a function from each object in a vector
Im正在编码一台谜机,在使用矢量中的元素时遇到了问题,只得到了一个分段错误。我需要在单个字符上使用向量中每个转子的函数,在迭代器移动时转换字符,在列表中向前移动一次,向后移动一次。我已经注释掉了其他转换来隔离问题。
机器.cpp
#include "Machine.h"
using namespace std;
Machine::Machine(const vector<Rotor>& rots, const Plugboard & pb)
: rotors(rots), plugboard(pb) {}
// give c's alphabet index
int Machine::getPosition(char c) {
if (c >= 'A' && c <= 'Z') {
return c - 'A';
} else {
cout << "not an accepted character";
return -1;
}
}
// give letter at index i in alphabet
char Machine::atPosition(int i) {
assert(i >= 0 && i <= 25);
return "ABCDEFGHIJKLMNOPQRSTUVWXYZ" [i];
}
char Machine::encode(char c) {
assert(c >= 'A' && c <= 'Z');
// plugboard
// c = plugboard.getMatch(c);
// forward pass through rotors
for (std::vector<Rotor>::iterator it = rotors.begin(); it != rotors.end(); ++it) {
c = it->process(c);
}
// reflector
// c = Reflector::reflect(c);
// backwards pass through rotors
for (std::vector<Rotor>::iterator it = rotors.end(); it != rotors.begin(); --it) {
c = it->processInverse(c);
}
return c;
}
我的主要功能的相关调用部分:
Rotor rot1(argv[1]);
Plugboard pb1(argv[2]);
vector<Rotor> rotors(1, rot1);
Machine machine(rotors, pb1);
machine.encode('A');
您错误地向后迭代。rotors.end()
指向的迭代器超过了向量的末尾,它不是一个有效的对象。。。因此,对其调用函数是未定义的行为。
如果你想向后迭代,你必须使用反向迭代器:
for (std::vector<Rotor>::reverse_iterator it = rotors.rbegin();
it != rotors.rend(); ++it) {
c = it->processInverse(c);
}
相关文章:
- 如何创建对象函数指针C++映射?
- 为什么我可以改变常量对象中的成员变量,这是返回常量对象函数的结果?
- 如何将对象函数的实例传递给另一个函数
- 调用模板函数的问题"No matching function for call"参数:迭代器、对象函数
- makefile对我的名称空间对象/函数/构造函数的不确定引用
- 将对象函数转换为函数指针
- 非对象函数/类函数C++
- 线程对象函数 C++
- C 将成员对象函数分配给类成员功能
- 使用基本指针调用派生对象函数
- 可以(通过编译器)使用多少个线程来初始化全局对象(函数main之前)
- C++类对象函数
- 对对象::函数的未定义引用
- 无法弄清楚将多个对象函数作为单独的线程调用的语法
- 在提升作用域出口中调用对象函数
- 使用基指针来使用派生对象函数
- 在for_each lambda 中调用对象函数
- C++:: 模板函数 - 从对象函数获取对象的地址
- Qt5 未解析的外部静态元对象函数
- 通过变量使用对象和对象函数