我有一些用于绘制多边形边的代码,例如,应该在具有顶点0,1和2的三角形中绘制多边形边,边(0,1),(1,2)和(2,0).我以为我可以这样做:
for(size_t j = 0, k = 1; j <= vertices.size()-1; j++, k++){
if(j == vertices.size()-1){k = 0;} //For j to k final edge
...
//draw edges, etc.
...
}
Run Code Online (Sandbox Code Playgroud)
......但这会使k值爆炸成无限循环.我已经看过这个并且怀疑问题可能出在我的索引中,但是如果一切都依赖于j,我会认为也许vertices.size()搞砸了.我在这段代码中遗漏了什么,或者我应该更仔细地查看实际的顶点向量?
我没有进入循环使用size_t.为什么?如果我使用int我进入循环,输出是:11, 11
int main()
{
int j = 11;
for (size_t i = 11; i > - 1; --j, i -=12)
{
std::cout << i << ", " << j << std::endl;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud) 所以我对 Java 非常陌生,但到目前为止我真的很喜欢它。我对 C++ 很熟悉,并试图转换我的一些代码以了解更多信息。我一直在翻译我的代码size_t。我知道 Java 中没有无符号整数类型,但我可以long改用吗?我只需要注意底片的情况吗?
感谢您的洞察力!
在某些代码中使用size_t值时,我遇到了一个小问题.
首先,我想使用size_t,因为它[保证]在大多数平台上都是相同的大小,从32位到64位不应该导致任何问题.
然后我否定了size_t值,得到了一个非常大的数字,回头看,我意识到size_t是无符号的.有intptr_t也是有符号的,但应该用于指针,而uintptr_t是无符号的,也用于指针.
我最终的目标是在c中实现一组简单的定点数学函数.
我的问题是我可以在所有计算中使用uintptr_t像int一样吗?这会导致任何问题吗?
我有一个std::map<std::string,std::size_t>键映射计数器。当我增加一个计数器时,我不知道它是否已经存在。如果是,则递增。如果不是,则设置为 1。这很容易做到:
std::map<std::string,std::size_t> counters;
//...
auto c_it = counters.find(key);
if(c_it == counters.end())
counters.insert(key,1);
else
(*c_it)++;
Run Code Online (Sandbox Code Playgroud)
这是一个简单的事情的很多代码......我想这样做:
counters[key]++;
Run Code Online (Sandbox Code Playgroud)
但这会产生未定义的行为,因为std::size_t()在映射中不存在计数器时调用,并且不能保证std::size_t()初始化为 0。
我看到了两个潜在的解决方案:
std::size_t使用默认构造函数创建时强制初始化为 0的类型。std或 中有这样的类型boost吗?std::allocator<std::pair<const Key,T>>作为std::map. 但我不知道该怎么做。注意:我只使用 C++11(我不想要 C++>=14 的解决方案)
目前使用 WSL2、g++、以及-std=c++20 -Wall -Wextra -Wvla -Weffc++ -Wsign-conversion -Werror.
在我正在构建的程序中,因为我使用了多个 STL 容器,例如std::vector、std::array、std::string等,所以我遇到了许多涉及size_t(from.size()或.length()) 和有符号值之间的整数算术或逻辑比较的情况。
为了避免发生错误,我已将值(“我认为”通常应始终为正)更改为无符号值,方法是更改变量定义或使用static_cast<size_t>()(这使我的代码行特别长)。但现在我遇到越来越多的下溢错误。
我是否应该将所有变量更改回有符号类型并使用断言来查看它们是否变为负数?有哪些有效的方法可以在有符号整数和无符号整数(尤其是.size())之间进行整数算术和逻辑比较?
如果你进入我的帖子历史,你会发现我正在尝试为我正在研究的语言开发一个翻译.我想使用size_t使用两个不同的代码,但它们都没有返回任何内容.
这是我正在尝试的帖子:http://stackoverflow.com/questions/1215688/read-something-after-a-word-in-c
当我尝试使用我正在测试的文件时,它什么都不返回.这是示例文件(只是我试图用我的语言开发的打印函数):
print "This is a print function that i'm trying to develop in my language"
Run Code Online (Sandbox Code Playgroud)
但请记住,这就像在Python中打印一样,用户输入引号("")是什么必须打印到所有人,请记住,用户可以选择放入引号的内容,然后不要像简单的cout,发布读取引号内部的内容并将其打印到所有内容.但是这里有两个测试代码可以执行此操作,但是它们都没有返回给我:
#include <iostream>
#include <fstream>
#include <string>
#include <cstdlib>
using namespace std;
int main( int argc, char* argv[] )
{
// Error Messages
string extension = argv[ 1 ];
if(argc != 2)
{
cout << "Error syntax is incorrect!\nSyntax: " << argv[ 0 ] << " <file>\n";
return 0;
}
if(extension[extension.length()-3] != '.')
{
cout << "Extension not …Run Code Online (Sandbox Code Playgroud) 我试图将total_elements设置为0,但它最终会给我一个随机的大数字.我对为什么会发生这种情况感到非常困惑.这是我的结构:
typedef struct sack {
Element *elements;
size_t total_elements;
} Sack;
typedef struct element {
char *name;
int occurances;
struct element *next;
} Element;
Run Code Online (Sandbox Code Playgroud)
这是代码:
void init_sack(Sack *sack) {
if(!(sack = calloc(1, sizeof(Sack)))) {
return;
}
sack->elements = NULL;
sack->total_elements = 0;
return;
}
Run Code Online (Sandbox Code Playgroud) 首先,我是一个c ++新手.如果这个问题听起来很愚蠢,请原谅.
我遇到了从unsigned_int到size_t的转换问题,如VS编译器所示.以下是导致编译器抱怨的代码行.
size_t findNextAlphaNumericPosition(string &str)
{
for (size_t i = 0; i < str.length; i++)
{
if (isalpha(str[i])) return i;
}
return -1;
}
Run Code Online (Sandbox Code Playgroud)
当它运行到这一行时它会抱怨:
for (size_t i = 0; i < str.length; i++)
Run Code Online (Sandbox Code Playgroud)
任何想法都将受到高度赞赏.它阻止VS编译.
我的代码编译,虽然printf没有显示任何内容?
如果我取出格式化程序部分,printf那么它的工作正常.
#include <stdio.h>
size_t MyStrlen(const char *s1)
{
const char *s1Copy = s1;
while (*s1)
{
*s1Copy++;
}
return s1Copy -s1;
}
int main(void)
{
const char str[] = "HELLO";
printf("Length: %d \n", (unsigned int)MyStrlen(str));
return 0;
}
Run Code Online (Sandbox Code Playgroud) 当我尝试像这样编译 smth 时,我收到此错误“'operator new'的第一个形参必须是'size_t'”:
void* operator new(MyStd::UInt);
Run Code Online (Sandbox Code Playgroud)
我使用在 64 位机器上运行的 Visual Studio 2013 express。
有谁知道,为什么会出现这个错误?
如果您需要更多信息,请告诉我...这个项目非常庞大!