Amy Zhou Ответов: 2

Новички искренне просят совета по поводу результата печати


То, что описывает этот класс, относится к "двум суммам", которые являются правильными и пригодными для использования с веб-сайта Leetcode. Сегодня я хочу представить "сумму двух", введя значение самостоятельно (например, часть int main() ниже). Ожидаемый выходной результат - [0,1], но я все еще не могу выполнить его после долгого размышления. Новички искренне просят совета, может быть, вы также можете приложить свое письмо, чтобы я мог учиться, большое вам спасибо.

#include <iostream>
#include <string>
#include <unordered_map>
#include <vector>
using namespace std;

class Solution
{
public:
    vector<int> twoSum(vector<int> &nums, int target)

    {
        unordered_map<int, int> indies;
        for (int i = 0; i < nums.size(); ++i)
            indies[nums[i]] = i;

        for (int i = 0; i < nums.size(); ++i)
        {
            int left = target - nums[i];
            if (indies.count(left) && indies[left] != i) 
            {
                return {i, indies[left]};
            }
        }
        return {};
    }
};

int maim()
{
    Solution twotwo;
    vector<int> number = {2, 7, 11, 15};
    int tg = 9;
    cout << twotwo.twoSum(number, tg);
}


Что я уже пробовал:

Я хочу представить "сумму двух", введя значение самостоятельно (например, часть int main() ниже). Ожидаемый выходной результат - [0,1], но я все еще не могу выполнить его после долгого размышления.

2 Ответов

Рейтинг:
13

CPallini

Функция возвращает вектор целых чисел, но cout он не может напрямую печатать их. Есть (по крайней мере) два альтернативных решения:

  • Итеративно выводите векторные элементы в основной функции:
int main()
{
    Solution twotwo;
    vector<int> number = {2, 7, 11, 15};
    int tg = 9;

    vector<int> result = twotwo.twoSum(number, tg);


    // print the resulting vector

    cout << "[";
    for (size_t n = 0; n < result.size(); ++n)
    {
      cout << result[n];
      if ( n != result.size()-1)
        cout << ",";
    }
    cout << "]" << endl;
}

или..
  • так как это прекрасный повод для перегрузки оператора вставки <<, сделайте именно это:
ostream & operator << (ostream & os, const vector <int > & v)
{
  os << "[";

  for ( size_t n = 0; n < v.size(); ++n)
  {
    os << v[n];
    if ( n != (v.size() - 1) )
    os << ',';
  }

  os << "]";

  return os;
}


int main()
{
    Solution twotwo;
    vector<int> number = {2, 7, 11, 15};
    int tg = 9;
    cout << twotwo.twoSum(number, tg) << endl;
}


Amy Zhou

Большое спасибо. Текущая ситуация заключается в том, что проблема результата печати была решена. Я могу использовать онлайн-компилятор для его выполнения, но Visual Studio 2019 для Mac, который я использую, имеет следующие проблемы:

предупреждение: обобщенные списки инициализаторов являются расширением C++11 [-Wc++11-extensions]
возвращение {я, - Индии, [влево]};

ошибка: неагрегатный тип 'vector<int>' не может быть инициализирован с помощью списка инициализаторов
возвращение {я, - Индии, [влево]};

предупреждение: обобщенные списки инициализаторов являются расширением C++11 [-Wc++11-extensions]
вернуть {};

ошибка: неагрегатный тип 'vector<int>' не может быть инициализирован с помощью списка инициализаторов
вернуть {};

ошибка: неагрегатный тип 'vector<int>' не может быть инициализирован с помощью списка инициализаторов
вектор<int> number = {2, 7, 11, 15};

Я читал много связанных решений, таких как изменение на "-std=c++11" и так далее, но до сих пор нет никакого способа решить эту ошибку. Не могли бы вы научить меня, как ее решить?..

CPallini

Я предлагаю вам использовать
std=c++последняя версия
Видеть
https://docs.microsoft.com/en-us/cpp/build/reference/std-specify-language-standard-version?view=vs-2019

Amy Zhou

Извините, я хотел бы спросить о месте, чтобы определить изменение. Находится ли он в моей рабочей области проекта, а затем в task.json ниже, место, соответствующее "args", изменяется на "-std=c++latest"?

CPallini

Вы можете легко установить такое свойство в Visual Sudio Ide. Смотрите инструкции в нижней части страницы, на которую я ссылался в предыдущем комментарии.

Рейтинг:
1

OriginalGriff

Во-первых, исправьте имя своей функции: "maim" - это не то же самое, что "main"

Во-вторых, вы не можете печатать вектор напрямую. Это поможет: Как распечатать содержимое вектора в C++?[^]


Amy Zhou

Большое спасибо. Текущая ситуация заключается в том, что проблема результата печати была решена. Я могу использовать онлайн-компилятор для его выполнения, но Visual Studio 2019 для Mac, который я использую, имеет следующие проблемы:

предупреждение: обобщенные списки инициализаторов являются расширением C++11 [-Wc++11-extensions]
возвращение {я, - Индии, [влево]};

ошибка: неагрегатный тип 'vector<int>' не может быть инициализирован с помощью списка инициализаторов
возвращение {я, - Индии, [влево]};

предупреждение: обобщенные списки инициализаторов являются расширением C++11 [-Wc++11-extensions]
вернуть {};

ошибка: неагрегатный тип 'vector<int>' не может быть инициализирован с помощью списка инициализаторов
вернуть {};

ошибка: неагрегатный тип 'vector<int>' не может быть инициализирован с помощью списка инициализаторов
вектор<int> number = {2, 7, 11, 15};

Я читал много связанных решений, таких как изменение на "-std=c++11" и так далее, но до сих пор нет никакого способа решить эту ошибку. Не могли бы вы научить меня, как ее решить?..