#include <iostream>
#include <vector>
#include <string>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
class thing{
public:
vector<unsigned short> vec;
thing(string);
};
int main(){
thing adam("12345");
for(int i = adam.vec.size() - 1;i >= 0;i--){
cout << adam.vec[i] << endl;
}
}
thing::thing(string str){
for(int i = str.size() - 1; i >= 0;i--){
cout << str[i] << endl;
vec.push_back(str[i]);
}
}
我正在尝试创建一个构造函数,该构造函数接受一个字符串并以相反的字符串填充向量,但与其将值5,4,3,2,1
填充到向量中,不如将其53,52,51,59,49
填充到向量中。 。当我打电话给push_back()
时,我会感到困惑。
答案 0 :(得分:2)
我正在尝试创建一个构造函数,该构造函数接收一个字符串并以相反的字符串填充向量
您可能真的不想这样做。正如@JesperJuhl建议的那样-您始终可以反向访问该字符串。为什么要复制?
而不是用矢量5,4,3,2,1填充矢量,而是用53,52,51,59,49填充矢量
您误以为'5'
,'4'
,'3'
和它们的整数值。字符串元素的值是数字,但这些数字是某些字符集的索引。无需赘述-这是您所用字符集的相关片段:
实际上,字符'5'
在字符集中的索引为53(十进制),'4'
的索引为52,依此类推。
答案 1 :(得分:0)
for(int i = adam.vec.size() - 1;i >= 0;i--) cout << adam.vec[i] << endl;
您以相反顺序插入的代码可以正常工作。但是,您也会以相反的顺序显示矢量,因此它会返回到先前的顺序。要以正确的顺序显示,只需使用:
thing adam("12345");
for(size_t i = 0; i < adam.vec.size(); i++)
cout << adam.vec[i] << ' ';
cout << endl;
//or
for(const auto &element : adam.vec)
cout << element << ' ';
cout << endl;
您的方法for(int i = str.size() - 1; i >= 0;i--){...}
在大多数情况下可以向后迭代,但是将size
强制转换为int
可能是一个问题。标准库提供了其他方法。示例:
thing::thing(string str)
{
std::copy(str.crbegin(), str.crend(), std::back_inserter(vec));
}
或使用iterators向前或向后移动。