Ich habe eine Frage bezüglich der Kompilierungszeit zum Abrufen der Größe eines Vektors in C++20. Basierend auf C++20 ist es möglich, in der Kompilierungszeit einen Vektor oder einen String im Umfang einer Funktion zu erstellen.
Es gibt den folgenden Teil des Codes
#include
#include
#include
consteval auto copyVecToArray(){
std::vector vec{1,2,3,4,5,6,7};
std::array arr;
std::copy(std::begin(vec),std::end(vec),std::begin(arr));
return arr;
}
int main() {
constexpr auto value = copyVecToArray();
for(auto el : value){
std::cout 'vec.std::vector::size()'
> /opt/compiler-explorer/gcc-14.2.0/include/c++/14.2.0/bits/stl_vector.h:993:32:
> error: the value of 'vec' is not usable in a constant expression 993
> | { return size_type(this->_M_impl._M_finish -
> this->_M_impl._M_start); }
> | ~~~~~~^~~~~~~ :6:22: note: 'vec' was not declared 'constexpr'
> 6 | std::vector vec{1,2,3,4,5,6,7};
> | ^~~ :7:28: note: in template argument for type 'long unsigned int'
> 7 | std::array arr;
> | ~~~~~~~~^~ :8:55: error: no matching function for call to 'begin(int&)'
> 8 | std::copy(std::begin(vec),std::end(vec),std::begin(arr));
> |
Aber wenn ich den obigen Code ein wenig ändere und die Größe des Vektors von einer Consteval-Funktion zurückgebe, wird dies erfolgreich kompiliert.
Ich habe eine Frage bezüglich der Kompilierungszeit zum Abrufen der Größe eines Vektors in C++20. Basierend auf C++20 ist es möglich, in der Kompilierungszeit einen Vektor oder einen String im Umfang einer Funktion zu erstellen. Es gibt den folgenden Teil des Codes [code]#include #include #include
consteval auto copyVecToArray(){ std::vector vec{1,2,3,4,5,6,7}; std::array arr; std::copy(std::begin(vec),std::end(vec),std::begin(arr)); return arr; } int main() { constexpr auto value = copyVecToArray(); for(auto el : value){ std::cout 'vec.std::vector::size()' > /opt/compiler-explorer/gcc-14.2.0/include/c++/14.2.0/bits/stl_vector.h:993:32: > error: the value of 'vec' is not usable in a constant expression 993 > | { return size_type(this->_M_impl._M_finish - > this->_M_impl._M_start); } > | ~~~~~~^~~~~~~ :6:22: note: 'vec' was not declared 'constexpr' > 6 | std::vector vec{1,2,3,4,5,6,7}; > | ^~~ :7:28: note: in template argument for type 'long unsigned int' > 7 | std::array arr; > | ~~~~~~~~^~ :8:55: error: no matching function for call to 'begin(int&)' > 8 | std::copy(std::begin(vec),std::end(vec),std::begin(arr)); > | [/code] Aber wenn ich den obigen Code ein wenig ändere und die Größe des Vektors von einer Consteval-Funktion zurückgebe, wird dies erfolgreich kompiliert. [code]#include #include #include consteval auto getVec(){ std::vector vec{1,2,3,4,5,6,7}; return vec; } consteval auto getSize(){ return getVec().size(); } consteval auto copyVecToArray(){ std::array arr; auto vec = getVec(); std::copy(std::begin(vec),std::end(vec),std::begin(arr)); return arr; } int main() { constexpr auto value = copyVecToArray(); for(auto el : value){ std::cout
Angenommen, ich habe einen Vektor von Wörtern und möchte für jedes Wortvorkommen in diesem Vektor zählen und dann mit seiner Vorkommen auf eine Karte ausgeben. Wie mache ich es am effizientesten mit...
Angenommen, ich habe einen Vektor von Wörtern und möchte für jedes Wortvorkommen in diesem Vektor zählen und dann mit seiner Vorkommen auf eine Karte ausgeben. Wie mache ich es am effizientesten mit...
Ich möchte wissen, ob es in C ++ eine STL -Funktion gibt, um die Dimensionen eines Vektors zu erhalten. Die Funktion gibt jedoch keine Abmessungen zurück.