mirror of
https://github.com/vlang/v.git
synced 2025-09-15 18:36:37 -04:00
Updated V for CPP developers (markdown)
parent
5d05aa1d42
commit
a08193931e
@ -2,234 +2,265 @@
|
|||||||
<tr><td colspan="2" align="center">Hello World</td></tr>
|
<tr><td colspan="2" align="center">Hello World</td></tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
<pre class="highlight highlight-source-v">
|
|
||||||
#include <iostream>
|
```cpp
|
||||||
|
#include <iostream>
|
||||||
int main() {
|
int main() {
|
||||||
std::cout << "Hello World!" << "\n";
|
std::cout < "Hello World!" < "\n";
|
||||||
}
|
}
|
||||||
</pre>
|
```
|
||||||
|
|
||||||
</td>
|
</td>
|
||||||
<td valign="top">
|
<td valign="top">
|
||||||
<pre>
|
|
||||||
|
```v
|
||||||
fn main() {
|
fn main() {
|
||||||
println('Hello World!')
|
println('Hello World!')
|
||||||
}
|
}
|
||||||
</pre>
|
```
|
||||||
|
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
|
|
||||||
<tr><td colspan="2" align="center">Vector initialization</td></tr>
|
<tr><td colspan="2" align="center">Vector initialization</td></tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
<pre>
|
|
||||||
std::vector<int> numbers = {1, 2, 3, 4};
|
```cpp
|
||||||
</pre>
|
std::vector<int> numbers = {1, 2, 3, 4};
|
||||||
|
```
|
||||||
|
|
||||||
</td>
|
</td>
|
||||||
<td valign="top">
|
<td valign="top">
|
||||||
<pre>
|
|
||||||
|
```v
|
||||||
numbers := [1, 2, 3, 4]
|
numbers := [1, 2, 3, 4]
|
||||||
</pre>
|
```
|
||||||
|
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
<tr><td colspan="2" align="center">Add an element to a vector</td></tr>
|
<tr><td colspan="2" align="center">Add an element to a vector</td></tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
<pre>
|
|
||||||
|
```cpp
|
||||||
numbers.push_back(5);
|
numbers.push_back(5);
|
||||||
</pre>
|
```
|
||||||
|
|
||||||
</td>
|
</td>
|
||||||
<td valign="top">
|
<td valign="top">
|
||||||
<pre>
|
|
||||||
numbers << 5
|
```v
|
||||||
</pre>
|
numbers < 5
|
||||||
|
```
|
||||||
|
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
<tr><td colspan="2" align="center">Printing a vector</td></tr>
|
<tr><td colspan="2" align="center">Printing a vector</td></tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
<pre>
|
|
||||||
|
```cpp
|
||||||
std::copy(numbers.begin(), numbers.end(),
|
std::copy(numbers.begin(), numbers.end(),
|
||||||
std::ostream_iterator<int>(std::cout, " "));
|
std::ostream_iterator<int>(std::cout, " "));
|
||||||
std::cout << '\n';
|
std::cout < '\n';
|
||||||
</pre>
|
```
|
||||||
|
|
||||||
</td>
|
</td>
|
||||||
<td valign="top">
|
<td valign="top">
|
||||||
<pre>
|
|
||||||
|
```v
|
||||||
println(numbers)
|
println(numbers)
|
||||||
</pre>
|
```
|
||||||
|
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
|
|
||||||
<tr><td colspan="2" align="center">Filtering a vector</td></tr>
|
<tr><td colspan="2" align="center">Filtering a vector</td></tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
<pre>
|
|
||||||
std::copy_if(numbers.begin(), numbers.end(),
|
|
||||||
std::back_inserter(bar),
|
|
||||||
[](int i){ return i % 2 == 0; });
|
|
||||||
|
|
||||||
</pre>
|
```cpp
|
||||||
|
std::copy_if(numbers.begin(), numbers.end(),
|
||||||
|
std::back_inserter(bar),
|
||||||
|
[](int i){ return i % 2 == 0; });
|
||||||
|
```
|
||||||
|
|
||||||
</td>
|
</td>
|
||||||
<td valign="top">
|
<td valign="top">
|
||||||
<pre>
|
|
||||||
|
```cpp
|
||||||
numbers.filter(it % 2 == 0)
|
numbers.filter(it % 2 == 0)
|
||||||
</pre>
|
```
|
||||||
|
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<tr><td colspan="2" align="center">Reading a file</td></tr>
|
<tr><td colspan="2" align="center">Reading a file</td></tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
<pre>
|
|
||||||
#include <iostream>
|
```cpp
|
||||||
#include <fstream>
|
#include <iostream>
|
||||||
|
#include <fstream>
|
||||||
std::ifstream f("path");
|
std::ifstream f("path");
|
||||||
std::string text;
|
std::string text;
|
||||||
text.assign(std::istreambuf_iterator<char>(f), {});
|
text.assign(std::istreambuf_iterator<char>(f), {});
|
||||||
if (!f)
|
if (!f)
|
||||||
std::cerr << "error reading from file\n";
|
std::cerr < "error reading from file\n";
|
||||||
</pre>
|
```
|
||||||
|
|
||||||
</td>
|
</td>
|
||||||
<td valign="top">
|
<td valign="top">
|
||||||
<pre>
|
|
||||||
|
```v
|
||||||
import os
|
import os
|
||||||
|
|
||||||
text := os.read_file(path) or {
|
text := os.read_file(path) or {
|
||||||
eprintln(err)
|
eprintln(err)
|
||||||
}
|
}
|
||||||
</pre>
|
```
|
||||||
|
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
<tr><td colspan="2" align="center">Monomorphic function</td></tr>
|
<tr><td colspan="2" align="center">Monomorphic function</td></tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
<pre>
|
|
||||||
template <typename T>
|
```cpp
|
||||||
|
template <typename T>
|
||||||
auto simple_fn(T param) {
|
auto simple_fn(T param) {
|
||||||
return param;
|
return param;
|
||||||
}
|
}
|
||||||
auto value = simple_fn<int>(1);
|
auto value = simple_fn<int>1);
|
||||||
</pre>
|
```
|
||||||
|
|
||||||
</td>
|
</td>
|
||||||
<td valign="top">
|
<td valign="top">
|
||||||
<pre>
|
|
||||||
fn simple_fn<T>(param T) T {
|
```v
|
||||||
return param
|
fn simple_fn[T](param T) T {
|
||||||
|
return param
|
||||||
}
|
}
|
||||||
|
|
||||||
value := simple_fn(1)
|
value := simple_fn(1)
|
||||||
</pre>
|
|
||||||
|
```
|
||||||
|
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
|
|
||||||
<tr><td colspan="2" align="center">Monomorphic struct</td></tr>
|
<tr><td colspan="2" align="center">Monomorphic struct</td></tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
<pre>
|
|
||||||
template <typename T>
|
```cpp
|
||||||
|
template <typename T>
|
||||||
struct generic_struct {
|
struct generic_struct {
|
||||||
T value;
|
T value;
|
||||||
void generic_method();
|
void generic_method();
|
||||||
};
|
};
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
generic_struct<T>::generic_method() {
|
generic_struct<T>:generic_method() {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
</pre>
|
|
||||||
|
```
|
||||||
|
|
||||||
</td>
|
</td>
|
||||||
<td valign="top">
|
<td valign="top">
|
||||||
<pre>
|
|
||||||
struct GenericStruct<T> {
|
```v
|
||||||
value T
|
struct GenericStruct[T] {
|
||||||
|
value T
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn (g GenericStruct[T]) generic_method() {
|
||||||
fn (g GenericStruct<T>) generic_method() {
|
return
|
||||||
return
|
|
||||||
}
|
}
|
||||||
</pre>
|
```
|
||||||
|
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
|
|
||||||
<tr><td colspan="2" align="center">Type reflection</td></tr>
|
<tr><td colspan="2" align="center">Type reflection</td></tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
<pre>
|
|
||||||
#include <iostream>
|
```cpp
|
||||||
|
#include <iostream>
|
||||||
using Number = int;
|
using Number = int;
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
consteval bool is_number(T data) {
|
consteval bool is_number(T data) {
|
||||||
if constexpr (std::is_same<T, Number>()) {
|
if constexpr (std::is_same<T, Number>()) {
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
std::cout << is_number<Number>(0) << "\n";
|
std::cout << is_number<Number>(0) << "\n";
|
||||||
</pre>
|
```
|
||||||
|
|
||||||
</td>
|
</td>
|
||||||
<td valign="top">
|
<td valign="top">
|
||||||
<pre>
|
|
||||||
|
```v
|
||||||
|
|
||||||
type Number = int
|
type Number = int
|
||||||
|
|
||||||
fn is_number<T>(data T) bool {
|
fn is_number[T](data T) bool {
|
||||||
$if T is Number {
|
$if T is Number {
|
||||||
return true
|
return true
|
||||||
} $else {
|
} $else {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
println(is_number(Number(0)))
|
println(is_number(Number(0)))
|
||||||
</pre>
|
|
||||||
|
```
|
||||||
|
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
<tr><td colspan="2" align="center">Standard map</td></tr>
|
<tr><td colspan="2" align="center">Standard map</td></tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
<pre>
|
|
||||||
#include <iostream>
|
```cpp
|
||||||
#include <map>
|
#include <iostream>
|
||||||
|
#include <map>
|
||||||
|
|
||||||
std::map<std::string, int> my_map {
|
std::map<std::string, int> my_map {
|
||||||
{"KEY_1", 0},
|
{"KEY_1", 0},
|
||||||
{"KEY_2", 10},
|
{"KEY_2", 10},
|
||||||
};
|
};
|
||||||
|
|
||||||
for (const auto &[key, value] : my_map) {
|
for (const auto &[key, value] : my_map) {
|
||||||
std::cout << key << ": " << value << ", ";
|
std::cout << key << ": " << value << ", ";
|
||||||
}
|
}
|
||||||
std::cout << "\n";
|
std::cout << "\n";
|
||||||
</pre>
|
```
|
||||||
|
|
||||||
</td>
|
</td>
|
||||||
<td valign="top">
|
<td valign="top">
|
||||||
<pre>
|
|
||||||
|
|
||||||
|
|
||||||
|
```v
|
||||||
my_map := map {
|
my_map := map {
|
||||||
'KEY_1': 0
|
'KEY_1': 0
|
||||||
'KEY_2': 10
|
'KEY_2': 10
|
||||||
}
|
}
|
||||||
|
|
||||||
println(my_map)
|
println(my_map)
|
||||||
</pre>
|
```
|
||||||
|
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
|
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user