簡體   English   中英

為什么std :: transform不將std :: string向量轉換為unsigned int向量?

[英]Why doesn't std::transform convert the std::string vector to unsigned int vector?

如標題中所述,我正在嘗試將std::string的向量轉換為unsigned int 但是我遇到了細分錯誤。 這是我的代碼:

#include<iostream>
#include<string>
#include<vector>
#include<sstream>

int main() {
    unsigned int N = 3;
    std::string array_string = "2 5 8";
    std::vector<unsigned int> A;

    std::istringstream array_stream(array_string);

    std::vector<std::string> array {
        std::istream_iterator<std::string>{array_stream},
        std::istream_iterator<std::string>{}
    };
    A.clear(); A.reserve(N);
    std::transform(array.begin(), array.end(), A.begin(), [] (const std::string& str) {
        return std::stoi(str);
    });
    for(std::vector<unsigned int>::iterator it = A.begin(); it != A.end(); it++) {
        std::cout << *it << " ";
    }
    std::cout << std::endl;
    std::cout << A.size() << std::endl;
    return 0;
}

OTOH,在對std::transform的調用A.begin()更改為std::back_inserter(A) 這是因為A為空時A.begin()失敗了嗎?

這是因為A為空時A.begin()失敗了嗎?

是的,這就是原因。 您的reserve電話不會改變A為空的事實,此后它仍然為空。 調用reserve僅更改容量 ,即后續插入將不會分配任何內存。

如果要使用A.begin() ,則必須調用resize ,因為這實際上會更改A的大小:

A.resize(N); //Resize array
std::transform(array.begin(), array.end(), A.begin(), [] (const std::string& str) {
    return std::stoi(str);
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM