为什么 std::transform 不将 std::string 向量转换为无符号的 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.begin()
失败时,A
是空的?
这是因为
A.begin()
失败时,A
为空?
是的,这就是原因。你对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);
});
相关文章:
- std::向量与传递值的动态数组
- std::sort()函数无法对向量的一部分进行排序
- 如何在旧c++中初始化const-std向量
- 如何检查两个 std::向量在小于 O(n) 的时间复杂度内是否相等
- 使用 std::vector::reverse_iterator 将 int 序列化为字节向量?
- 在 std::无符号字符的向量处存储 int 的十六进制表示形式
- 如何在向量中删除 std::function<void()>?
- 从 std<Derived>::shared_ptr 的向量返回 std::shared_ptr<Base>
- 将无符号字符的向量存储在数组中会给我 std::bad_alloc
- std::find,返回所有找到的值的替代方法,而不仅仅是存在重复的向量的第一个值
- 如何创建一个类,以便向量工作 std::vector<MyClass<int>> v{ 1,2,3 };
- C++ STD 函数运算符:有没有一种方法可以通过函数将一个向量映射到另一个向量上?
- 对的排序向量 (std::vector<pair<int, int>>) 按对的第一个元素搜索并更新第二个元素值
- 使用 std::sort 对向量进行稳定排序
- 如何在C++中将字节向量(std::vector<uint8_t>)转换为不同的uint32_t,uint16_t和uint8_t变量
- C++程序中的向量 std::bad_alloc 错误
- 如何诊断保存和加载位向量(std::vector)的奇怪行为<bool>?
- 用SWIG包裹一个4维标准::向量 std::complex。<float>
- C++ 在抛出字符串向量"std::out_of_range"的实例后调用的终止
- 如何初始化 std::向量 std:固定长度对与默认值