簡體   English   中英

如何將運算符 >> 重載為向量

[英]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_backinsertemplace_back或方便的包裝器,如back_inserter或其他。

但在將數據讀入std::vector元素之前,它必須存在。 或者,你讀入一個臨時變量,然后使用上面提到的一些函數。

可惜沒有其他辦法

暫無
暫無

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

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