[Código] Falando sobre Pascal para C ++


Em Por sua vez, C ++, Pascal , voltamo-nos para falar com Pascal C ++.

sacnf () e printf ()

scanf e printf são, na verdade, funções fornecidas pela linguagem C, armazenadas nos arquivos de cabeçalho <cstdio>ou <stdio.h>. Em geral, a razão de sua velocidade cine coutmais rápido mais (se você quiser mais rápido, usar velocidades de leitura e gravação rápida ), e pode facilmente controlar os formatos de entrada e saída.

#include <bits/stdc++.h>

int main() {
	int x, y;
	scanf("%d%d", &x, &y);   // 读入 x 和 y
	printf("%d\n%d", y, x);  // 输出 y,换行,再输出 x
	return 0;
}

Entre eles, \nestá um caractere de nova linha, o que %dsignifica que a variável leitura ou saída é uma variável de número inteiro assinado (tipo int).

Da mesma forma, os comuns são:

%sRepresenta a cadeia de caracteres (incluindo matrizes de caracteres).
%cRepresenta caracteres.
%fRepresenta um número de ponto flutuante de precisão única (flutuante).
%lfRepresenta um número de ponto flutuante de precisão dupla (duplo).
%lldRepresenta um número inteiro longo (long long). Dependendo do sistema, pode ser% I64d.
%uRepresenta int não assinado.
%lluRepresenta um longo não assinado (longo não assinado), que também pode ser% I64u.

Além do identificador de tipo, existem algumas maneiras de controlar o formato. Muitas não são comumente usadas.As duas listas comumente usadas são as seguintes:

%1dRepresenta um número inteiro de comprimento 1. Ao ler, você pode ler os dígitos um por um, mesmo sem espaços. Na saída, se o comprimento especificado for maior que o número de dígitos, ele será preenchido com espaços antes do número. Se o comprimento especificado for menor que o número de dígitos, não haverá efeito.
%.2lfOu %0.2lf, para saída, mantenha 2 casas decimais.

Por que existe & em scanf (), mas não em printf ()?
Aqui, & é realmente um operador de endereçamento e retorna o endereço da variável na memória. O parâmetro recebido pelo scanf é o endereço da variável. Pode ser necessário usar ponteiros para deixar completamente claro, mas agora você só precisa anotá-la.

Nota: Não há exemplos
ao ler cadeias de caracteres e matrizes de caracteres :

#include <bits/stdc++.h>
using namespace std;

int main() {
	char a[105];
	scanf("%s",a);
	return 0;
}

#define Definição de macro

#defineÉ um comando de pré-processamento usado para definir macros, que é essencialmente uma substituição de texto. Por exemplo:

#include <bits.stdc++.h>
#define N 105;
using namespace std;

int main() {
	cout << N << endl;
	return 0;
}

N não é uma variável, mas o compilador substituirá todo o texto N no código por 105, mas como parte do identificador. N. não será substituído. Por exemplo, MN não será substituído por M105. Da mesma forma, a sequência não será substituída.

Por exemplo, também podemos:

#define re(i,a,b)  for(int i=a; i<=b; i++)
#define ms(i,a) memset(a,i,sizeof(a))
#define LL long long
#define ULL unsigned long long
#define max(a,b)  (((a)>(b)) ? (a):(b))
#define min(a,b)  (((a)<(b)) ? (a):(b))

Prejudicial, eu quase esqueci, o operador trinocular ainda não falou.

Operador trinocular

Por que é chamado de operador trinocular?
Operador unário: Exemplo: i ++ (apenas um operando de i)
Operador binocular: Exemplo: a + b (a e b dois operandos)
Operador trinacular: a? ​​B: c (a, b, c Três operandos)

a ? b : c

Equivalente a:

if(a) {
	return b;
} else {
	return c;
}

Exemplos:

inline int abs(int a) {
	return a>0 ? a : -a;
}
inline int gcd(int a,int b) {
    return b>0 ? gcd(b,a%b):a;
}

Como escrever outras funções gcd: https://blog.csdn.net/Ljnoit/article/details/99319849

Struct

Uma estrutura pode ser vista como uma combinação de elementos chamados membros.

Pode ser visto como um tipo de dados personalizado.

Descrito nesta página structé diferente do C struct, em C ++ structé semelhante estendido para classum especificador de classe.

Definir estrutura

struct Object {
	int weight;
	int value;
} e[105];

const Object a;
Object b, B[105], tmp;
Object *c;

Nos exemplos acima define uma chamada Objectestrutura, dois membros dos elementos value, weight, tipos para int.

Na }definição do tipo de dados para os Objectconstante a, variável b, variáveis tmp, matrizes B, ponteiros c. Para alguns tipos existentes, você pode usar esse método para definir constantes, variáveis, ponteiros, matrizes etc.

Em relação aos indicadores: Não seja obrigado a dominar.

Definindo um ponteiro
Se é um ponteiro que define um tipo interno, é o mesmo que a definição usual de um ponteiro.

Se a definição da estrutura é um ponteiro, usado na definição StructName*definida.

struct Edge {
  /*
  ...
  */
  Edge* nxt;
};

O exemplo acima é apenas um exemplo, sem ter que se preocupar com o significado real.

Acessar / modificar elementos de membros
Você pode usar nomes de variáveis.Nomes de elementos de membros para acesso (onde aspas duplas não são gravadas no programa, o mesmo abaixo).

Tais como: a saída v var cout << var.vmembros: .

Você também pode usar o nome do ponteiro-> nome do elemento do membro ou usar (* nome do ponteiro) .Nome do elemento do membro para acessar.

Por exemplo: Atribua o elemento membro v da estrutura apontada pelo ponteiro da estrutura ptr para tmp: (* ptr) .v = tmp ou ptr-> v = tmp.

Por que você precisa de uma estrutura?
Primeiro de tudo, todas as estradas levam a Roma, você pode obter o mesmo efeito sem usar estruturas. No entanto, a estrutura pode ser explicitamente elemento de membro (tipicamente em variável algoritmo de competição) empacotados juntos, como no presente exemplo Objecta estrutura, de venda value, weightjuntos (definição significativa da estrutura é um Peso e valor do item). A vantagem disso é que limita o uso de elementos membros.
Imagine se você não usar uma estrutura e houver duas matrizes value[], Value[]é fácil escrever confusão. No entanto, se você usar uma estrutura, poderá reduzir a chance de usar um erro variável.

E uma estrutura (tipo de estrutura, tais como diferente Objectou (um exemplo de estrutura, tais como o acima diferente variável estrutura desta estrutura) eda matriz) podem ter o mesmo nome dos elementos de membro (por ex tmp. value, b.value), Um membro do elemento com o mesmo nome de cada Independente (tenha sua própria memória, por exemplo, modificar tmp.value não afetará b.valueo valor).
A vantagem disso é que você pode usar as mesmas variáveis ​​ou variáveis ​​semelhantes para descrever um item. Por exemplo, não há valor nas variáveis de membro de objeto, mas que também pode definir uma Carestrutura, mas também tem valor que membros; se você não usar a estrutura, talvez precisamos definir valueOfObject[], valueOfCar[]tal como uma matriz de nomes diferentes para distinguir.

Operações de arquivo

Leia o conteúdo do arquivo:

freopen("data.in", "r", stdin);

data.in é o nome do arquivo a ser lido e deve ser colocado no mesmo diretório que o arquivo executável

Saída para arquivo:

freopen("data.out", "w", stdout);

data.out é o nome do arquivo de saída, que está no mesmo diretório que o arquivo executável

Fechar fluxo de entrada / saída padrão

fclose(stdin);
fclose(stdout);

freopen()A função está no arquivo de cabeçalho <cstdio>ou <fstream>.

Namespace

O espaço para nome C ++ pode ser usado para resolver o problema de conflitos de nome em projetos complexos.

Por exemplo: tudo na biblioteca padrão C ++ é definido no namespace std.Se você definir uma variável chamada cin, poderá acessar a variável cin que você definiu através de cin e a cin da biblioteca padrão através de std :: cin Objetos sem se preocupar com conflitos.

O código a seguir declara um espaço para nome chamado A:

namespace A {
	int cnt;
	void f(int x) { cnt = x; }
}  // namespace A

Após a declaração, fora deste espaço para nome, você pode acessar a função f dentro do espaço para nome A até A :: f (x).

As declarações de namespace podem ser aninhadas, portanto, o seguinte código também é permitido:

namespace A {
	namespace B {
		void f() { ... }
	}  // namespace B
	
	void f() {
		B::f();  // 实际访问的是 A::B::f(),由于当前位于命名空间 A 内,所以可以省略前面的 A::
	}
}  // namespace A

void f()  //这里定义的是全局命名空间的 f 函数,与 A::f 和 A::B::f 都不会产生冲突
{
  A::f();
  A::B::f();
}

Depois que o espaço para nome for declarado, se os membros dentro do espaço para nome forem acessados ​​fora do espaço para nome, eles deverão ser adicionados na frente do nome do membro 命名空间::.

Existe alguma maneira mais conveniente de acessar diretamente os membros no espaço para nome através do nome do membro? A resposta é sim. Podemos usar o usingcomando.

using A instrução possui as duas seguintes formas:

1 using 命名空间::成员名;.: Esta instrução nos permite omitir o namespace antes de um nome de membro e acessar o membro diretamente pelo nome do membro, o que equivale a importar esse membro para o escopo atual.

2 using namespace 命名空间;.: Esta instrução pode acessar diretamente qualquer membro no espaço para nome através do nome do membro, o que equivale a importar todos os membros desse espaço para o escopo atual.
Portanto, se executado using namespace std;, todos os nomes em std serão introduzidos no espaço para nome global. Desta forma, podemos usar cin, em vez de std::cinusar coutsubstituto std::cout.

O uso de instruções pode causar conflitos de nomenclatura!

Desde a using namespace std;vontade stdde todos os nomes na introdução, por isso, se declarou com stdvariável ou função do mesmo nome, pode ser porque nomear conflito faz com que um erro de compilação.

Portanto, no projeto, não é recomendado using namespacenamespace; instruções.

Com a diretiva using, o código na base gramatical do C ++ pode ter esses dois equivalentes:

#include <iostream>

using std::cin;
using std::cout;
using std::endl;

int main() {
  int x, y;
  cin >> x >> y;
  cout << y << endl << x;
  return 0;
}
#include <iostream>

using namespace std;

int main() {
  int x, y;
  cin >> x >> y;
  cout << y << endl << x;
  return 0;
}

Em alguns problemas com várias subtarefas, podemos abrir um espaço para nome para cada subtarefa e definir as variáveis ​​e funções necessárias para resolver a subtarefa, para que cada subtarefa não interfira um com o outro até certo ponto. É conveniente depurar e melhorar a legibilidade do programa.

Publicado 106 artigos originais · elogiou 156 · mais de 40.000 visualizações

Acho que você gosta

Origin blog.csdn.net/Ljnoit/article/details/104960875
Recomendado
Clasificación