我有一个char矢量的c ++向量:std::vector<std::vector<char>> ref
把字符放入其中(大小增加,所以字符在那里)我无法打印它。
通过调用this->ref.back().back()
,它可以正确打印最后一个字符。但如果我ref.at(0).at(pos)
或ref[0].at(pos)
或ref[0][pos]
没有打印。
字符如下:
while (infile>>c)
{
if (c != '>') {
ref.back().push_back(c);
curSeqPos++;
}
else {
infile.ignore ( std::numeric_limits<std::streamsize>::max(), '\n' );
ref.push_back(std::vector<char>(USHRT_MAX));
curSeq++;
curSeqPos = 0;
}
}
知道我做错了什么吗?我是C ++的真正新手,可能在某个地方错过了参考。 任何帮助表示赞赏!
答案 0 :(得分:0)
我无法真正弄清楚你的代码。但是从这个pkc-config
,ref是一个二维矢量数组
由于std::vector<std::vector<char>> ref
是char的向量的二维数组,因此每个ref的索引说ref
都必须保存一个char向量。你必须这样做,那就是为ref索引创建一个单独的char向量,否则任何尝试在该索引上打印内容,SIGSEGV错误。
你也不能ref[1]
,除了在ref [0]你已经向它提供了一个char向量,否则你会得到SIGSEGV错误。
ref[0][1] = 'd';
答案 1 :(得分:0)
尽我所能建设性,这里有一个有效的例子:
#include <string> // for stdout, putc
#include <vector>
std::vector<std::vector<char>> const slist =
{{'o','n','e'},{'t','w','o'},{'t','h','r','e','e'}};
int main() {
const int sz = slist[1].size();
for(int p=0; p<sz; p++) {
putc(slist[1][p],stdout);
}
putc('\n',stdout);
return(0);
}
这会将“two \ n”打印到stdout。你不能像你想象的那样在你的角色向量上使用printf(“%s \ n”,slist [1])。这甚至没有发出警告,只打印出胡言乱语。 Cout&lt;&lt; iostreams的slist [1]因类型转换错误而失败。
我们是否正在解决您的问题所在?请指导我们。