我正在编写一些代码示例来自"如何像C++中的计算机科学家一样思考",这一个是关于处理扑克牌类型的对象和套牌.我正面临着这种情况:
int Card::find(const std::vector<Card>& deck) const {
size_t deckSize = deck.size();
for (size_t i=0; i<deckSize; i++)
if (equals(*this, deck[i])) return i;
return -1;
}
Run Code Online (Sandbox Code Playgroud)
我不能像在文本中那样在Visual Studio 2010中的C++中使用".length()",而是必须使用返回(我相信)std :: size_type的.size().我想我可以使用size_t并躲开它,以避免不同架构上的问题,正如我一直在阅读,但我想知道我是否返回i,但它比一个整数大,我会崩溃程序吗?
[编辑在我的问题中更具体:]一旦我开始使用向量比卡更大的东西,我考虑使用unsigned int因为编译器不匹配警告,但我觉得返回unsigned int或int有一些问题:1) int不会采用足够大的向量索引.2)返回unsigned int不会让我返回-1.3)unsigned int在所有架构上都不等于size_t(我也在ARM Cortex-M3上进行微控制器编程).
如果我有足够大的矢量,我该怎么办?
我有以下包含模板类的头文件:
#ifndef VECTOR_H
#define VECTOR_H
namespace lgl
{
namespace maths
{
template<class T, std::size_t SIZE>
class Vector
{
public:
Vector();
Vector(T defaultValue);
Vector(const Vector<T, SIZE>& other);
Vector<T, SIZE>& operator=(const Vector<T, SIZE>& other);
~Vector();
//accessors
const std::size_t size() const;
const T& operator[](std::size_t i) const;
T& operator[](std::size_t i);
//vector operations
Vector<T, SIZE> operator+(const Vector<T, SIZE>& other) const;
Vector<T, SIZE> operator-(const Vector<T, SIZE>& other) const;
Vector<T, SIZE> operator*(const T& scalar) const ;
Vector<T, SIZE> operator/(const T& scalar) const ;
T operator*(const Vector<T, SIZE>& …Run Code Online (Sandbox Code Playgroud) 我正在读一本教科书,其中一个例子就是这样做的.下面,我以缩写形式复制了这个例子:
#include <stdio.h>
#define SIZE 100
size_t linearSearch(const int array[], int searchVal, size_t size);
int main(void)
{
int myArray[SIZE];
int mySearchVal;
size_t returnValue;
// populate array with data & prompt user for the search value
// call linear search function
returnValue = linearSearch(myArray, mySearchVal, SIZE);
if (returnValue != -1)
puts("Value Found");
else
puts("Value Not Found");
}
size_t linearSearch(const int array[], int key, size_t size)
{
for (size_t i = 0; i < size; i++) {
if (key == array[i])
return …Run Code Online (Sandbox Code Playgroud) 是否可以定义一个支持所有标准(无符号)整数类型的泛型宏,以及size_t?
foo((size_t)42)只要size_t引用标准的无符号整数类型之一,就可以使用下面的示例。但是标准是否保证在任何情况下都是这种情况,或者也size_t可以指代扩展整数类型?
void foo_bool(_Bool x);
void foo_uchar(unsigned char x);
void foo_ushort(unsigned short x);
void foo_uint(unsigned x);
void foo_ulong(unsigned long x);
void foo_ullong(unsigned long long x);
#define foo(x) _Generic((x), \
_Bool: foo_bool, \
unsigned char: foo_uchar, \
unsigned short: foo_ushort, \
unsigned: foo_uint, \
unsigned long: foo_ulong, \
unsigned long long: foo_ullong)(x)
Run Code Online (Sandbox Code Playgroud) 是否size_t保证足够大以表示任何类型的大小?根据此参考:
size_t可以存储任何类型(包括数组)的理论上可能存在的对象的最大大小。
通常,这是一个可靠的参考,但我在标准的相关部分中找不到任何证明或质疑此主张的内容。
我正在为一个简单的程序编写代码,当给定多边形的边数和每边的长度作为作业时,该程序计算多边形的周长,问题是,当我这样做时,它for (size_t i = 0; i < sidesnumber; i++)会给我一个错误,size_t说“标识符” “size_t”未定义”。我已经尝试过也包括图书馆,stddef.h但它保持不变。
这是整个代码:
#include <stdio.h>
int sidesnumber = 0;
int sides[100];
int results;
main()
{
printf("Number of Sides\n");
sidesnumber = getchar();
sidesnumber -= 48;
for (size_t i = 0; i < sidesnumber; i++)
{
/* code */
getchar();
sides[i] = getchar();
sides[i] -= 48;
}
for (size_t i = 0; i < sidesnumber; i++)
{
/* code */
results += sides[i];
}
printf("The perimeter is:%d", results); …Run Code Online (Sandbox Code Playgroud) 令人尊敬的snprintf()功能...
int snprintf( char *restrict buffer, size_t bufsz, const char *restrict format, ... );
Run Code Online (Sandbox Code Playgroud)
缓冲区大小为size_t,但返回类型仅为 an ,这有什么意义int?
如果snprintf()应该能够将多个INT_MAX字符打印到缓冲区中,那么它肯定必须返回一个ssize_t或一个size_t以(size_t) - 1指示错误,对吧?
如果它不能打印多个INT_MAX字符,为什么是bufszasize_t而不是 anunsigned或 an int?或者 - 至少官方限制其值不大于INT_MAX?
首先,使用 Range-v3,我注意到
std::vector<int> v;
auto w = v | ranges::views::enumerate;
auto [x, y] = *w.begin();
static_assert(std::is_same_v<std::size_t, decltype(x)>);
Run Code Online (Sandbox Code Playgroud)
这对我来说很有意义,因为std::size_t据我所知,这是用于索引对象的正确类型。
然后,对于 C++20 范围,静态断言会失败。相反,以下传递,
static_assert(std::is_same_v<long, decltype(x)>);
Run Code Online (Sandbox Code Playgroud)
但与我的系统上long的不一样,我在其中验证了这一点std::size_t
static_assert(std::is_same_v<unsigned long, std::size_t>)
Run Code Online (Sandbox Code Playgroud)
在 GCC 13.2.1 上,这是示例。
我试图声明一个char数组的大小,我需要使用声明为size_t的变量的值来声明该大小.无论如何,我可以将size_t变量强制转换为int,以便我可以这样做吗?
的Objective-C运行提供class_addIvar C函数:
BOOL class_addIvar(Class cls, const char *name, size_t size,
uint8_t alignment, const char *types)
Run Code Online (Sandbox Code Playgroud)
我该怎么把为size和alignment?
我正在添加一个类型的实例变量UITextPosition *,但没有UITextPosition对象在范围内.因为size,我可以做sizeof(self),哪个self是子类UITextField?即,我可以假设一个UITextPosition对象与对象的大小相同UITextField吗?
我怎么得到alignment?