[英]How to overload operator >> to vector
#include <iostream>
#include <vector>
// // C++ template to print vector container elements
template <typename T>
std::ostream &operator<<(std::ostream &os, const std::vector<T> &v)
{
os << "[";
for (int i = 0; i < v.size(); ++i)
{
os << v[i];
if (i != v.size() - 1)
os << ", ";
}
os << "]\n";
return os;
}
//Operator overload >> (std::cin)
template <typename T>
std::istream &operator>>(std::istream &in, std::vector<T> &v)
{
for(int i =0;i<v.size();i++)
{
in>>v[i];
}
return in;
}
//TEST
// ↓
int main()
{
std::vector<int> vec{4, 2, 17, 11, 15};
std::vector<int> dupa;
std::cin >> dupa;
std::cout << vec;
return 0;
}
我怎樣才能重載運算符>>?? 不知道用std::istream怎么做,我得到一個錯誤“Core Dump (Segmentation fault)”:(我在網上某處看到這樣的任務,我想做,但是沒有解決辦法. 我不想使用“v.push_back (..)”
當您最初定義std::vector
時,它有 0 個元素。 它是空的。 因此,您不能訪問任何元素,也不能訪問第一個元素,例如“vec[0]”。 這通常會導致“分段錯誤”。
因此,您要么必須使用將元素添加到向量的函數之一,要么必須將空std::vector
調整為給定大小。 然后您可以訪問現有元素。
你的輸入循環
for (int i = 0; i < v.size(); ++i)
不會執行,因為大小為 0。
建議使用“添加元素”功能。 像push_back
或insert
或emplace_back
或方便的包裝器,如back_inserter
或其他。
但在將數據讀入std::vector
元素之前,它必須存在。 或者,你讀入一個臨時變量,然后使用上面提到的一些函數。
可惜沒有其他辦法
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.