Both are historical.
Others gave links for the difference, but the purpose it takes a bit of history.
Imagine the year is 1975 or so. Computer RAM is measured in bytes rather than gigabytes. Disks are measured in kilobytes. Computers require large rooms. Computer terminals are effectively dumb screens and keyboards that attach to the computer in the back room. Every computer uses a different, custom system. There is no such thing as mass produced software or mass produced hardware. Companies like IBM and Motorola would build a small number of each computer, perhaps 50 or 100 of them, which were then sold to universities and major businesses.
It was a very different world from an x86 on every desktop, and billions of processors manufactured each year.
Computers were slow. If you think compilation times are slow today, they were worse in the past. Disk drive speeds were measured in bytes per second. The "" and <> difference was so they could search different locations for the files, but it was up to the compiler to determine where to search, so you didn't need to search lots of places. The <> variation was for system-provided headers. The "" version was for your own project's headers. Over time as systems became more capable it was no longer burdensome or time consuming to search more than one location, so they did. Starting in about the mid 1990s most compilers used all locations in their search path, although potentially with different orders.
The difference between class and structs also has some historical background. C++ and C used to be the same language. Back then (now 1979-1982) compilers and tools were distributed in source form, and each vendor needed to specialize everything for the computer. That included customizing the compilers. In the AT&T computer lab where Stroustrup worked it was not strange at all for him to modify the compiler to add new functionality; computer labs were constantly modifying compilers to support each unique computer's features. There was no real standard beyond the book that Brian Kerningham helped Dennis Ritchie to write, which was called K&R C. Since the book specified that a struct need to behave in certain ways, and since Stroustrup needed different behavior -- he was trying to encapsulate both functions and data for distributing OS work across a network -- he used the name "class" to denote these special bundles. The additional processing done by a class slowly increased. Then, sometime after the language was renamed "C with Classes", and then later renamed "C++", in the late 1980s different compiler vendors started adding those same features back to the struct, things like constructors and virtual tables were added. Many implementations added inheritance to structs, added vtables to structs, and soon it was just easier to implement them with identical logic.
By the time C++ was standardized in 1998, the only significant differences between the two were access. That is, a struct's members are public by default and inheritance is private by default; a class's members are private by default and inheritance is public by default. Under the hood the compiler otherwise uses exactly the same rules and implementations for them.