Блог пользователя I_love_myself

Автор I_love_myself, 6 лет назад, По-русски

Добрый день, каждый раз, когда я пишу длинку, мне больно .

const int LOG = 50, RADIX = 1e+9;
struct BigInt {
	int a[LOG], len;
	BigInt(int x = 0) {
		len = 1;
		memset(a, 0, sizeof a);
		a[0] = x;
	}

	BigInt operator+(BigInt &other) {
		BigInt res;
		res.len = max(len, other.len);

		int c = 0;
		for (int i = 0; i < res.len || c; i++) {
			res.len = max(res.len, i + 1);
			int t = c + a[i] + other.a[i];
			c = t / RADIX;
			res.a[i] = t % RADIX;
		}

		return res;
	}

	BigInt operator+=(BigInt other) {
		return *this = *this + other;
	}
};

Я не раз ошибаюсь, пишу место res.a[i] просто res[i], да и с идейной точки зрения это логично. И тут до меня дошло, что оператор[] тоже можно перегрузить, но как это сделать так, чтобы можно было ставить его в левостороннюю часть выражения я не знаю, кто мне может с этим помочь? То есть я хочу, чтобы я мог написать выражение: res[i] = 1; и оно было эквивалентно res.a[i] = 1;

Upd: решено, спасибо!

  • Проголосовать: нравится
  • +26
  • Проголосовать: не нравится

»
6 лет назад, # |
  Проголосовать: нравится +31 Проголосовать: не нравится

Я не очень понял что ты хочешь сделать, но попробуй это.

int& operator [] (int x) {
  return a[x];
}