2017-05-30 92 views
-2

我有一个char向量的C++向量:std::vector<std::vector<char>> ref 将字符放入它后(大小增加,所以字符在那里)我无法打印它。char向量的C++向量不能被打印

通过调用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++的真正新手,可能在某处错过了一个参考。 任何帮助表示赞赏!

+2

什么是'pos'等于? – kfx

+9

这是一个[MCVE]大大改进的问题。没有看到你写的内容,很难知道你的错误在哪里。 –

+0

对不起,我正在读取一个文件,并希望将每个字符存储在一个数组/矢量中。如果一行以“>”开始,这行应该被忽略,并且应该创建一个新的char向量 – cruxi

回答

0

我不能真正做出很多形式的代码。但是从这个std::vector<std::vector<char>> ref,ref是矢量的二维阵列

由于ref是char的向量的二维阵列,所以ref的每个索引ref[1]都必须保持char向量。你必须这样做,那就是为ref的索引创建一个单独的char向量,否则尝试在该索引处打印内容,即SIGSEGV错误。

你也不能这样做ref[0][1] = 'd';,除非在ref [0] you'v已经指定了一个char的向量,否则你会得到SIGSEGV错误。

std::vector<std::vector<char>> ref(7); 
    std::vector<char> ref1(7); 

    //try 
    //ref[0][0] = 'f'; SIGSEGV error cus ref[0] is empty 

    ref1[0] = 'r'; 
    ref[0] = ref1; 
    ref[0][3] = 'g'; //valid 

    std::cout << ref[0][0]; // r 
+1

OP的语法没有错,所以他们已经知道这一点。这不是一个有用的答案。 –

+0

@ BoundaryImposition我编辑解释可能的原因为什么cruxi得到她的错误 –

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); 
} 

这版画 “两\ n” 来标准输出。你不能像你所期望的那样在你的角色矢量上使用printf(“%s \ n”,slist [1])。这甚至没有提出警告,只是打印出乱码。 Cout < < iostreams的slist [1]因类型转换错误而失败。

我们正在朝着你的问题的方向前进吗?请指导我们。