C ++:将字符串转换为向量,其中每个元素都是该字符的向量

时间:2018-04-30 18:01:47

标签: c++ c++14 stdvector

C ++中有没有办法将字符串转换为字符向量的向量?目前,我这样做:

std::string guide = "ACGCAC"; 
std::vector< std::vector<char> > word(guide.begin(), guide.end());

但是,正常的索引方法(使用.at())和设置不起作用。如果我尝试将带有此向量的元素设置为另一个向量(见下文),则它不起作用。

word[loc] = bases; //where bases = std::vector<char> and loc = int 

我正在尝试使用下面的Python代码,但是在C ++中。感谢您的任何见解。

word = [[letter] for letter in guide]

1 个答案:

答案 0 :(得分:2)

此:

using (MemoryStream gifStream = new MemoryStream())
                {
                    collection.Write(gifStream, MagickFormat.Gif);
                    var bitmap = new BitmapImage();

                    bitmap.BeginInit();
                    bitmap.StreamSource = gifStream;
                    bitmap.CacheOption = BitmapCacheOption.OnLoad;
                    bitmap.EndInit();
                    bitmap.Freeze();

                    animationImagePlayer.Source = bitmap;
                }

不做你认为的事情。您希望std::vector<std::vector<char>> word(guide.begin(), guide.end()); 中的每个char用于构建大小为1的guide,其中包含该vectorchar。但实际上,这样做是尝试构建vector来自的char 并且实际上有一个构造函数:#3

explicit vector( size_type count, const Allocator& alloc = Allocator() );

也就是说,对于您的第一个角色'A',您没有构建包含字符'A'的向量,您正在构建一个包含65 '\0'的向量秒。这是因为char可隐式转换为size_t

只需手动执行您想要的操作:

std::vector<std::vector<char>> as_individual(std::string const& s) {
    std::vector<std::vector<char>> v;
    v.reserve(s.size());
    for (char c : s) {
        v.push_back({c});
    }
    return v;
}